2014-11-07 91 views
2

我有一些預先存在的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 

我試圖重新安裝gslsudo port install gsl),但仍顯示錯誤信息。當使用Google搜索錯誤消息時,我看到很多點擊,但到目前爲止沒有任何幫助。

的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 

我有點複製粘貼此生成的文件,我在網上找到,並沒有得到太多。我編輯我的問題來添加我的生成文件。基本上,我的功能int main{}在名爲metapopulation.c的文件中,該文件位於cli目錄中。 libs目錄包含所有其他.c和.h文件。並在librarieslibraries函數中將它們編譯並調用到目錄0123中。

+2

您鏈接到圖書館?顯示您用來鏈接的命令行。 – 2014-11-07 00:10:20

+0

@PaulGriffiths感謝您的評論。看到我更新的問題。希望這是你所要求的。在Bash中,命令行'make cli_exec'。 '庫'函數似乎工作正常,我只接收到'cli-exec'的錯誤。我應該以某種方式鏈接到我的'gsl'目錄嗎?我實際上通過編寫'#include '鏈接到每個.c文件中的'gsl'目錄' – 2014-11-07 00:54:17

+1

確認您將'-lgsl'傳遞給鏈接器, -L/path/to/libgsl'在庫搜索路徑(應該是,但是檢查) – 2014-11-07 01:54:15

回答

3

我沒有在您的Makefile的任何地方看到具體提及lgsl。當你建立與libgsl,您的最低編譯字符串爲:

gcc -Wall -Wextra -o progname progname.c -lgsl 

-lgsl告訴鏈接ld(即自動GCC之後調用)的可執行鏈接到libgsl。我不知道你在哪裏做。在您的Makefile中,只需在-o cli_exec之後添加-lgsl即可使用。例如:

gcc cli/makepopulation.c $(wildcard libraries/*) -I$(INCLUDE_PATH) -o cli_exec -lgsl 
+0

非常感謝@DavidCRankin – 2014-11-07 17:56:24

相關問題