Связывание boost_1_55_0 asio

Я использую это в своем make-файле для создания моей программы:

all:    server.cpp
g++ -o server server.cpp -I ~/boost/include -L~/boost/lib -Wl,-rpath,~/boost/lib -lboost_system -lboost_thread -DBOOST_ALL_NO_LIB=1

Когда я компилирую, я получаю эти предупреждения:

/usr/bin/ld: warning: libboost_system.so.1.53.0, needed by /usr/local/lib/libboost_thread.so, may conflict with libboost_system.so.5

Когда я запускаю свою программу, я получаю предупреждение:

 ./server: error while loading shared libraries: libboost_thread.so.1.53.0: cannot open shared object file: No such file or directory

команда -Wl/rpath в данный момент у меня не работает. Я также устал использовать

export LD_LIBRARY_PATH=~/boost/lib

прежде чем я запущу свою программу, и я получу это обратно с терминала:

export: relocation error: export: symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference

Что я могу сделать, чтобы указать, какую библиотеку я хочу использовать при выполнении программы?


person hededo    schedule 07.04.2014    source источник


Ответы (2)


Библиотеки (обычно) boost/lib/stage/lib, а не boost/lib.

Также динамический загрузчик не поддерживает расширение ~. Используйте полный путь, например.

 -Wl,-rpath,/home/hededo/boost/stage/lib

Или, действительно, как я показал в своем предыдущем ответе

 -Wl,-rpath,"$HOME/boost/stage/lib"

Кавычки нужны только для того, чтобы это работало, если $HOME содержит специальные символы (например, пробелы)

Вы также можете посмотреть на

  • статическое связывание — так что вы можете использовать Boost, но никогда не полагайтесь на какую-либо внешнюю общую библиотеку для этого
  • утилита BCP — это инструмент для извлечения подмножеств Boost (здесь: bcp)
person sehe    schedule 07.04.2014

В качестве альтернативы вы можете использовать не-boost asio, который не требует связывания с boost.

person ppl    schedule 07.04.2014
comment
Интересный аргумент. Я изучаю это сейчас. Спасибо - person hededo; 07.04.2014
comment
Я думаю, что большинство библиотек можно - опционально - настроить только для заголовков с собственным Boost. Кроме того, существуют статические ссылки и утилита BCP инструмент для извлечения подмножеств Boost. Оба из них больше применимы в общем плане ИМО. - person sehe; 07.04.2014
comment
Я не думаю, что у asio есть такая возможность; это зависит от системы повышения (и, возможно, потока повышения) для кода ошибки. Вы всегда можете включить этот cpp в свой проект. БКП не очень надежен. По моему опыту, в конечном итоге вам придется исправлять часть того, что производит BCP. - person ppl; 09.04.2014