2013-07-30 18 views
2

我知道,有很多類似的問題,但我是litle有點不同,並非他們幫助我。提升iostreams庫存在,但我無法連接它

我使用升壓Iostreams庫,這裏是我的問題,我想我的程序與庫鏈接:

ld -I/usr/include/boost/iostreams/ -I/usr/include/boost/iostreams/device/ -L/usr/lib/libboost_iostreams.so -lboost-iostreams fd.o -o x 

,結果是:

ld: cannot find -lboost-iostreams 

當我試着寫它明確:

ld -I/usr/include/boost/iostreams/ -I/usr/include/boost/iostreams/device/ --library /usr/lib/libboost_iostreams.so -lboost-iostreams fd.o -o x 

它告訴我,該庫不存在:

ld: cannot find -l/usr/lib/libboost_iostreams.so 
ld: cannot find -lboost-iostreams 

但它確實:

$ ls -l /usr/lib/libboost_iostreams* 
-rw-r--r-- 1 root root 204682 feb 4 05:28 /usr/lib/libboost_iostreams.a 
lrwxrwxrwx 1 root root  20 feb 4 05:28 /usr/lib/libboost_iostreams-mt.a ->   libboost_iostreams.a 
lrwxrwxrwx 1 root root  28 feb 4 05:28 /usr/lib/libboost_iostreams-mt.so -> libboost_iostreams.so.1.49.0 
lrwxrwxrwx 1 root root  28 feb 4 05:28 /usr/lib/libboost_iostreams.so -> libboost_iostreams.so.1.49.0 
-rw-r--r-- 1 root root 94280 feb 4 05:28 /usr/lib/libboost_iostreams.so.1.49.0 

關於我:

  • OS:Debian的7喘息
  • 編。郎:C++
  • 編譯器:克++(Debian的4.7.2-5)4.7.2
  • 接頭:GNU LD(GNU Binutils的用於Debian)2.22
  • 升壓庫版本:1.49(與debian回購)

謝謝!

編輯:

正確的選擇應該是-lboost_iostreams,不-lboost-iostreams

EDIT2:

編輯後,我的命令是:

ld fd.o -I/usr/include/boost/iostreams/ -I/usr/include/boost/iostreams/device/ -o x $(LIB_PATH) -lboost_iostreams 

哪裏LIBPATH是ONE如下:

LIB_PATH= 
LIB_PATH=-L/usr/lib/ 
LIB_PATH=/usr/lib/libboost_iostreams.so 
LIB_PATH=/usr/lib/libboost_iostreams.a 

,但結果仍然是:

ld: warning: cannot find entry symbol _start; defaulting to 000000000804cc10 
fd.o: In function `__static_initialization_and_destruction_0(int, int)': 
fd.cpp:(.text+0xd6): undefined reference to `__dso_handle' 
ld: x: hidden symbol `__dso_handle' isn't defined 
ld: final link failed: Bad value 
make: *** [x] Error 1 
+1

該庫被稱爲帶有下劃線的'libboost_iostreams',但您試圖將'lboost-iostreams'與'-'連接起來。 – juanchopanza

回答

2

一般來說,你不直接調用ld而是叫gccg++代替。這可能會在鏈接時添加正確的搜索路徑。

如果顯式鏈接,則不得包含-l標誌。只需將/usr/lib/libboost_iostreams.a/usr/lib/libboost_iostreams.so添加到您要鏈接的文件列表中即可。

-l標誌添加lib前綴和.so.a後綴。

+0

嗯,它不會拋出一個錯誤,就像我沒有鏈接任何東西... – Addman

+1

看起來像你沒有使用gcc或g ++進行鏈接。不要直接使用ld – doron