Свързване boost_1_55_0 asio

Използвам това в моя makefile, за да създам моята програма:

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

Като алтернатива можете да използвате asio без усилване, което не изисква свързване с усилване.

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