У меня есть уже существующий код C (закодированный кем-то другим), который должен работать нормально, и я просто пытаюсь его скомпилировать и запускать на своем компьютере. Когда я пытаюсь создать исполняемый файл с Makefile я получаю следующее сообщение:компиляция .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
), но остается сообщение об ошибке. Я вижу много хитов, когда я отправляю сообщение об ошибке, но до сих пор ничего не помогало.
Makefile
Вот мой Makefile:
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, что я нашел в Интернете и не получить много. Я редактировал свой вопрос, чтобы добавить мой make-файл. В принципе, моя функция int main{}
в файле metapopulation.c, который находится в каталоге cli
. каталог libs
содержит все остальные файлы .c и .h. и они скомпилированы и вызваны .o в каталоге с именем libraries
функцией libraries
.
Вы ссылаетесь на эту библиотеку? Покажите командную строку, которую вы используете для связи. –
@PaulGriffiths Спасибо за ваш комментарий. См. Мой обновленный вопрос. Надеюсь, это то, о чем вы просили. В Bash в командной строке 'make cli_exec'. Функция 'libraries', кажется, работает нормально, я получаю сообщение об ошибке для' cli-exec'. Должен ли я каким-либо образом ссылаться на мой каталог 'gsl'? Я действительно связан с каталогом 'gsl' в каждом .c файле, написав' #include ' –
Подтвердите, что вы передаете' -lgsl' в компоновщик и что ' -L/path/to/libgsl' находится в пути поиска библиотеки (должно быть, но проверьте) –