Компиляция проблем с повышением

У меня возникают проблемы с компиляцией программы, которая включает в себя "boost/asio.hpp". Компиляция этой программы (взята из сайта boost):

example.cpp:
#include <boost lambda="" lambda.hpp="">
#include <iostream>
#include <iterator>
#include <algorithm>

int main()
{
 using namespace boost::lambda;
 typedef std::istream_iterator<int> in;

 std::for_each(
 in(std::cin), in(), std::cout << (_1 * 3) << " " );
}
</int></algorithm></iterator></iostream></boost>

с

c++ -I path/to/boost_1_55_0 example.cpp -o example

работает отлично. Но когда программа включает в себя:

boost/asio.hpp

И я пытаюсь скомпилировать его с помощью:

g++ -I /usr/local/boost_1_55_0 example.cpp -o example -lboost_system -lboost_thread

генерируется исполняемый файл, но я получаю эту ошибку при попытке выполнить "пример":

./example: error while loading shared libraries: libboost_system.so.1.55.0: cannot open shared object file: No such file or directory

Файл "libboost_system.so.1.55.0" находится по адресу "/usr/local/lib". Я также попытался скомпилировать программу с помощью:

g++ -I /usr/local/boost_1_55_0 -L/usr/local/lib example.cpp -o example -lboost_system -lboost_thread

И получил ту же ошибку.

Как я могу это исправить?

2 ответа

Вам нужно сообщить компоновщику, где найти нужную библиотеку. Я предпочитаю RPATH для этого:

g++ -I /usr/local/boost_1_55_0 -Wl,-rpath=/usr/local/lib example.cpp -o example -lboost_system -lboost_thread

Это испекает /usr/local/lib в исполняемый файл, поэтому ld может найти его позже. Вы можете увидеть, что ld будет загружать, запустив ldd example после сборки. Держу пари прямо сейчас, он говорит "не найден", и после добавления RPATH он найдет библиотеку.

Другой вариант - установить /usr/local/lib в качестве пути поиска системы в вашем /etc/ld.so.conf, но это немного больше тяжеловесов.


настройте LD_LIBRARY_PATH как экспорт LD_LIBRARY_PATH = путь к увеличению

licensed under cc by-sa 3.0 with attribution.