2010-07-30 162 views
3

如果我用「-L」編譯我的源代碼。可以找到動態庫libmd5.so。gcc鏈接選項-L:如何指定動態鏈接庫的路徑

gcc main.c -g -O2 -Wall -o main -L. -lmd5 -lcr 

但是,如果我離開「-L。」 - 選項,鏈接器不會找到動態庫。我怎樣才能改變,而不必調用「-L。」?

(libmd5.so額外的信息和libmd5.so.1.0.1位於在/ home /用戶/ BA)

回答

8

確實沒有什麼錯-L標誌,所以你不應該着急擺脫它 - 它是在運行時有問題,因爲系統不會加載您鏈接庫至 ?這裏有一些選項:

  • 將/ home/user/ba添加到/etc/ld.so.conf(或類似的操作系統),然後運行ldconfig。這將是系統範圍。
  • 設置LIBRARY_PATH(用於鏈接時間)和LD_LIBRARY_PATH(用於運行時)環境變量。 export LD_LIBRARY_PATH=/home/user/baexport LIBRARY_PATH=/home/user/ba。這隻對當前shell有效。
  • 在可執行文件中設置rpath(儘管您仍然需要-L .)。將-L /home/user/ba -Wl,-rpath,/home/user/ba添加到您的鏈接器標誌。這僅對您正在製作的可執行文件有效。
  • 將您的共享庫放在系統範圍的庫搜索路徑中,如/usr/lib。這將是系統範圍。

上面的方法在運行時也有效果 - 當您運行應用程序時,它也會嘗試在系統的/ home/user/ba或其他庫搜索路徑中查找libmd5.so。

+0

謝謝。我真的不想擺脫它。但我不知道如何改變automake,使「-L」。包括在與Anjuta編譯我的項目時。 – OldMacDonald 2010-07-30 20:01:07

1

你可以設置LIBRARY_PATH環境變量。

export LIBRARY_PATH=/home/user/ba