Программа компилируется нормально с boost libs, но ошибка при ее запуске - PullRequest
0 голосов
/ 10 июня 2011

В двух словах ...

Программа на C ++ (с использованием библиотек наддува) прекрасно компилируется в Eclipse, но затем «ошибка при загрузке общих библиотек: libboost_thread.so.1.46.1: не удается открыть файл общего объекта: такой файл или каталог отсутствует», который он отображал при запуске .


Подробнее

Я запускаю базовую программу на C ++, чтобы проверить, могу ли я правильно использовать библиотеки потоковой поддержки.

#include <boost/thread/thread.hpp>
#include <iostream>

void hello ()
{
    Std::cout<<”Hello, I am a thread”<<std::endl;
}

int main ()
{
    boost::thread th1(&hello);
    th1.join();
}

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

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

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

Ответы [ 5 ]

6 голосов
/ 29 августа 2012

У меня была очень похожая проблема с FreeFileSYnc, компилируется нормально, но не запускается из-за ошибки потока libboost:

FreeFileSync: error while loading shared libraries: libboost_thread.so.1.51.0: cannot open shared object file: No such file or directory

Чтобы это исправить я сделал:

sudo ldconfig /usr/local/lib

Это может помочь другим людям.

3 голосов
/ 10 июня 2011

Вы проверили, присутствует ли libboost_thread.so.1.46.1 в LD_LIBRARY_PATH?
Скопируйте библиотеку на ваш LD_LIBRARY_PATH, по этому пути ищутся динамические библиотеки (так) во время выполнения.

1 голос
/ 25 сентября 2012

Немного опоздал на вечеринку, но затратил весь день с одной и той же проблемой. Я недавно установил последний boost 1_51_0 локально в мой $HOME/bin/boost_1_51_0. Что мне помогло, так это экспортировать пути включения и библиотеки, добавив эти строки в мой .bash_rc:

export CPP_INCLUDE_PATH=$HOME/bin/boost_1_51_0/include
export LD_LIBRARY_PATH=$HOME/bin/boost_1_51_0/lib:$LD_LIBRARY_PATH

Затем добавьте путь включения и путь к lib к вашему Makefile:

INCLUDE_BOOST += -I$(HOME)/bin/boost_1_51_0/include
LDLIBS_BOOST  += -L$(HOME)/bin/boost_1_51_0/lib

CPPFLAGS += $(INCLUDE)
CPPFLAGS += $(INCLUDE_BOOST)

Затем вы можете добавить libs из 1_51 через

LDLIBS += -lm
LDLIBS += -lboost_filesystem
LDLIBS += -lboost_chrono
LDLIBS += -lboost_timer
LDLIBS += -lboost_system

$(TARGET): $(SRCS)
    $(CXX) $(CPPFLAGS) $(LDLIBS_BOOST) $(SRCS) $(LDLIBS)  $(OPT)  -o $@
1 голос
/ 10 июня 2011

boost - это динамическая библиотека.Он должен быть найден во время выполнения программы (например, DLL в Windows).

0 голосов
/ 12 июня 2017

У меня была такая же проблема, и ldconfig не устранил ее.

Если вы, как и я, установили библиотеки повышения с помощью простой команды bjam, скорее всего, вы установили библиотеки в подпапке stage . См. Эту страницу как ссылку .Для меня работало следующее:

sudo ldconfig /usr/local/include/boost_1_64_0/stage/lib 
...