2016-02-04 14 views
0

我用幾個庫例如pthread-lpthreadmath-lmath但我不需要使用-L選項來指定鏈接路徑。GNU C:我如何編譯動態庫選項-lmylib但沒有-l選項,C程序

但是,

  1. 我創建了一個庫mylib通過編譯我的程序mylib.c作爲 gcc -fPIC mylib.c -o libmylib.so
  2. 把它放在/usr/local/lib/libcustom
  3. 添加的路徑/usr/local/lib/libcustom到一個文件 /etc/ld.so.conf.d/libcustom.conf
  4. 運行ldconfig
  5. 運行export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/customlib
  6. mylib

創建sample.c調用的函數現在,當我編譯sample.c一個gcc -L /usr/local/lib/customlib -o sample.o -lmylib它工作得很好,當我嘗試gcc sample.c -o sample.o -lmylib它給LD誤差/usr/bin/ld: cannot find -lmylib

我想知道爲什麼在-lpthread的情況下爲-L標誌可選,在-lmylib的情況下爲必選標誌?在-lmylib的情況下,如何跳過-L的使用?

謝謝。

+1

嘗試 「-p LDCONFIG | grep的-i MYLIB」 檢查存儲在當前高速緩存 –

+0

您的庫,因爲系統(鏈接器)已經知道在哪裏可以找到'libpthread',但不知道在哪裏尋找'libmylib' – Shark

回答

3

您正在尋找LIBRARY_PATH

LD_LIBRARY_PATH用於加載動態庫運行時,而不是編譯時間。


邊注:在現有的環境變量添加時,請務必使用$LD_LIBRARY_PATH而不只是LD_LIBRARY_PATH。否則,您將丟棄原始內容並放入文字LD_LIBRARY_PATH

所以應該從改變:

export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/usr/local/lib/customlib 

到:

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib/customlib 
+1

謝謝!我正在尋找一種解決方案,我的自定義庫與系統庫保持區分,並且鏈接器自動識別庫。 – Anirban

+0

'LIBRARY_PATH'就是你要找的東西,然後:) – Qix

1

因此,您需要將mylib放置在鏈接器已知的路徑中。例如/ usr/lib或/ usr/local/lib。在你的情況下它適用於pthread,因爲它已經位於系統已知路徑中。