библиотека boost iostreams существует, но я не могу связать ее

Я знаю, что есть много похожих вопросов, но мой немного отличается, и они мне не помогли.

Я использую библиотеку boost-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 Wheezy
  • прог. язык: c++
  • компилятор: g++ (Debian 4.7.2-5) 4.7.2
  • компоновщик: GNU ld (GNU Binutils для Debian) 2.22
  • версия библиотеки boost: 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 является ОДНИМ из следующего:

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

person Addman    schedule 30.07.2013    source источник
comment
Библиотека называется libboost_iostreams с подчеркиванием, но вы пытаетесь связать lboost-iostreams с -.   -  person juanchopanza    schedule 30.07.2013


Ответы (1)


Вообще говоря, вы не вызываете ld напрямую, а вместо этого вызываете gcc или g++. Это может добавить правильные пути поиска при связывании.

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

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

person doron    schedule 30.07.2013
comment
похоже, вы не используете gcc или g++ для компоновки. Не используйте ld напрямую - person doron; 31.07.2013