나는 잘 작동해야하는 기존의 C 코드 (다른 사람이 코딩 함)를 가지고 있으며 컴퓨터를 컴파일하고 실행하려고합니다. 나는 다음과 같은 메시지가 메이크와 실행 만들려고 할 때 :컴파일 .c : 아키텍처 x86_64에 대한 정의되지 않은 기호
Undefined symbols for architecture x86_64:
"_gsl_ran_binomial", referenced from:
_develop in develop.o
_developAllRNAs in develop.o
_developWithFeedback in develop.o
"_gsl_ran_exponential", referenced from:
_randomOrg in G.o
_mutateBigK in G.o
_rpois in develop.o
[And some other gsl_related issues]
"_gsl_rng_uniform_int", referenced from:
_randomOrg in G.o
_mutateTrait in G.o
_mutateDBM in G.o
_substitutions in G.o
_makeGamete in G.o
ld: symbol(s) not found for architecture x86_64
을 나는 gsl
(sudo port install gsl
)를 다시 설치하려고하지만 오류 메시지가 남아있다. 내 오류 메시지를 검색 할 때 많은 조회수를 볼 수 있지만 지금까지 아무런 도움이되지 못했습니다.
메이크
여기 내 메이크입니다 :
LIBS = libs
INCLUDE_PATH=libs/
cli_exec: libraries
gcc cli/makepopulation.c $(wildcard libraries/*) -I$(INCLUDE_PATH) -o cli_exec
libraries:
mkdir libraries/
for dir in $(LIBS); do \
cd $$dir; \
gcc -c *.c -I../; \
mv *.o ../libraries; \
cd -; \
done
clean:
rm -rf libraries/ make_exec
내가 좀 복사 - 붙여 넣기 내가 온라인으로 발견하고 많이하지 않는이 메이크. 내 질문을 편집하여 makefile을 추가했습니다. 기본적으로 cli
디렉토리에있는 metapopulation.c라는 파일에 내 함수 int main{}
이 있습니다. libs
디렉토리에는 다른 모든 .c 및 .h 파일이 들어 있습니다. 그들은 libraries
함수에 의해 libraries
디렉토리에 컴파일되고 호출됩니다.
라이브러리에 링크 했습니까? 연결하는 데 사용하는 명령 줄을 표시하십시오. –
@ PaulGriffiths 의견을 보내 주셔서 감사합니다. 내 업데이트 된 질문보기 희망이 당신이 요구했던 것입니다. Bash에서는 명령 행'make cli_exec'를 사용합니다. 'libraries' 함수는 잘 작동하는 것처럼 보입니다.'cli-exec'에 대해서만 에러를받습니다. 어떻게 든'gsl' 디렉토리에 링크해야합니까? 나는 실제로 각 .c 파일의'gsl' 디렉토리에'#include '를 써서 링크했습니다. –
링커에'-lgsl'을 넘겨주고 있는지 확인하고' -L/path/to/libgsl'이 라이브러리 검색 경로에 있습니다. (그래야하지만 확인하십시오.) –