проблема библиотеки повышения C++: не может найти, что-lboost_system ld возвратил 1 статус выхода

У меня есть проблема с повышением. После того, как я установил повышение со следующей командой

sudo apt-get install python-dev 
sudo apt-get install libboost-python1.54 
sudo apt-get install libboost-system1.54 libboost-filesystem1.54 
tar -zxf Boost-2014.10.tar.gz 
cd ~/build-2014.10/ 
./bootstrap.sh 
sudo ./b2 install -j8 --prefix=/usr --libdir=/usr/lib --includedir=/usr/include --build-type=minimal variant=release --layout=tagged threading=single threading=multi

версия повышения 1.57. Затем я выполняю пример для тестирования. код как

#include <iostream>
using namespace std;
#include <boost/lexical_cast.hpp>
#include <boost/filesystem.hpp>
int main(){
    cout<<"hello"<<endl;
     int a=boost::lexical_cast<int>("123456");
     cout<<"boost "<<a<<endl;
     return 1;} 

Затем я компилирую его, ошибочные шоу

g++ test -o test.cpp -lboost_system
/usr/bin/ld: cannot find -lboost_system
collect2: error: ld returned 1 exit status

Если я удаляю строку

#include <boost/filesystem.hpp>

и скомпилируйте его с

g++ test -o test.cpp it works.

Как решить его?

1
задан 20 January 2016 в 07:26

2 ответа

Удостоверьтесь, что Вы понимаете различие между заголовочными файлами и библиотеками.

Заголовочные файлы (как/usr/include/boost/filesystem.hpp) - то, что Вы используете в своем исходном коде в качестве части Вашего #include директива. Чтения препроцессора C++, что файл и добавляет набор объявлений к Вашей программе.

библиотека А является скомпилированным набором различных функций, статических данных и другого материала. При использовании параметра -lboost_system, Вы говорите, что компилятор "Компилирует мою программу и связывает ее с библиотекой libboost_system".

Ваш компоновщик жалуется, что это не может найти ту библиотеку (/usr/bin/ld: cannot find -lboost_system). Вероятная причина состоит в том, что сценарий ./bootstrap.sh не устанавливал повышение надлежащих каталогов.

Отсюда на Вас имеют несколько опций.

, Если Вы хотите придерживаться для Повышения Вас, самостоятельно.

я рекомендовал бы установить пакет libboost-dev. Это установит то, что текущая версия повышения для Вашей системы и поместит все файлы в надлежащие места.

И наконец: когда Вы удалили #include строка из Вашего файла, это работало, но только потому, что Ваша программа не использует функциональности от повышения:: система. Если бы необходимо было использовать какие-либо классы/функции повышения, то Вы получили бы ошибки компиляции, если Вам не включали надлежащие заголовки.

3
ответ дан 7 December 2019 в 12:41

Порядок аргументов кажется важным, при условии, что пакет boost был ранее правильно установлен с

apt-get install -y libboost-dev

Например, при такой компиляции ( сначала cpp файлы, затем список libs), нет проблем

g++ app.cpp -std=c++11 -lboost_system -lboost_filesystem

Но команда ниже вызывает ошибки

g++ -std=c++11 -lboost_system -lboost_filesystem  app.cpp
g++ -std=c++11 -lboost_system -lboost_filesystem  app.cpp
/tmp/cc3kjjNn.o: In function `__static_initialization_and_destruction_0(int, int)':
app.cpp:(.text+0x9b): undefined reference to `boost::system::generic_category()'
app.cpp:(.text+0xa7): undefined reference to `boost::system::generic_category()'
app.cpp:(.text+0xb3): undefined reference to `boost::system::system_category()'
/tmp/cc3kjjNn.o: In function `boost::filesystem::exists(boost::filesystem::path const&)':
app.cpp:(.text._ZN5boost10filesystem6existsERKNS0_4pathE[_ZN5boost10filesystem6existsERKNS0_4pathE]+0x19): undefined reference to `boost::filesystem::detail::status(boost::filesystem::path const&, boost::system::error_code*)'
collect2: error: ld returned 1 exit status

Немного другой порядок аргументов вызывает другую ошибку

g++  -std=c++11  -lboost_system app.cpp -lboost_filesystem
/usr/bin/ld: /tmp/cc5p9PJh.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libboost_system.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

Также -lboost_xyz не должен включать суффикс .so, в противном случае

/usr/bin/ld: cannot find -lboost_filesystem.so

Я надеюсь, что это кому-то поможет.

0
ответ дан 22 December 2021 в 01:42

Другие вопросы по тегам:

Похожие вопросы: