2013-07-30 3 views
2

Я знаю, что много подобных вопросов, но мой бит немного отличается, а не им помогал.У меня есть библиотека 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 

О себе:

  • ОС: Debian 7 астматический
  • прог. языки .: C++
  • Компилятор: G ++ (Debian 4.7.2-5) 4.7.2
  • линкер: ГНУ ЛД (ГНУ Binutils для Debian) 2,22
  • подталкивание библиотека вер .: 1,49 (с DEBiAN репо)

Спасибо!

EDIT:

правильный вариант должен быть -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 ОДИН из следующих:

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 напрямую, а называют gcc или g++ вместо этого. Это может привести к правильному пути поиска при связывании.

Если вы явно указываете ссылку, вы не должны включать флаг -l. Просто добавьте /usr/lib/libboost_iostreams.a или /usr/lib/libboost_iostreams.so в список файлов, которые вы связываете.

-l флаг добавить lib префикс и .so или .a суффикс.

+0

Ну, это не ошибка, как будто я ничего не связывал ... – Addman

+1

похоже, что вы не используете gcc или g ++ для связи. Не использовать ld напрямую – doron