2011-11-28 45 views
4

嘗試使用Ubuntu爲64位unix編譯一些東西。作爲一個聲明,我幾天前纔開始使用linux和gcc,所以仍然在學習我的方式。無論如何,得到了以下錯誤:如何在Ubuntu中爲g ++設置64位庫的庫搜索路徑?

/home/myuser/myproject/myfile.cpp:437:未定義的引用`clock_gettime」

快速谷歌顯示我需要-lrt選項與librt.a鏈接。所以,檢查我的命令行(格式化的可讀性,不同的文件名,我已經刪除的文件名列表):

/usr/bin/g++ 
-Wl, 
--gc-sections 
-fno-exceptions 
-m64 
-B/usr/bin 
-o 
"/home/myuser/myproject" 
-Wl, 
-Map, "/home/myuser/myproject/myproject.map" 
-g 
"/home/myuser/myproject/myproject.cpp.obj" 
..and some more .objs.. 
-Xlinker 
--start-group 
"-lpthread" 
"-lrt" 
"/home/myuser/myproject/lib/mylib.a" 
..and some more .as.. 
-Xlinker 
--end-group 

嗯。看起來-lrt已經存在了,也許我沒有librt.a?不搜索所有文件顯示我有/usr/lib/x86_64-linux-gnu/librt.a。我猜g ++看着錯誤的地方。所以在上面的命令行中,我用/usr/lib/x86_64-linux-gnu/librt.a和bingo替換了-lrt!它編譯和鏈接罰款。不幸的是,這是一個自動化的工具,我需要在很多計算機上工作,並且不能對librt.a的位置做出假設,所以我真的需要它來處理-lrt。那麼如何設置本地庫文件搜索路徑?首先嚐試更改LD_LIBRARY_PATH環境變量,但顯然(從我可以從更多的谷歌搜索中得知),這在Ubuntu下被忽略,而我應該在/etc/ld.so.conf.d/中弄亂.conf文件,但是我已經它看起來像我已經有x86_64的Linux的-gnu.conf在那裏與下面幾行:

# Multiarch support 
/lib/x86_64-linux-gnu 
/usr/lib/x86_64-linux-gnu 

從我讀了這一點,它看起來這應該是我所需要的。那種堅持到哪裏去...

回答

1

回答我自己的問題,以防萬一別人有這個問題。原來正確的librt.a被鏈接,但鏈接器對鏈接順序非常敏感。將-lrt和-lpthread放在組的末尾可以解決問題。