LINUX.ORG.RU

Boost линкование

 , ,


0

1

Добрый день!

Никак не могу простенькую програмку из tutorial-a залинковать.

Вот консоль: g++ tut2.cpp -o example ../../../../usr/lib/x86_64-linux-gnu/libboost_regex.a

Получаю в ответ undefined reference to 'boost::re_detail::perl_matcher.

Если в консоли задать: g++ tut2.cpp -o example то ответ будет тот же.

Заранее спасибо.



Последнее исправление: GH12 (всего исправлений: 1)
Ответ на: комментарий от t1nman

g++ tut2.cpp -o example -L../../../../usr/lib/x86_64-linux-gnu/libboost_regex.a -lboost_regex и g++ tut2.cpp -o example -L/usr/lib/x86_64-linux-gnu/libboost_regex.a -lboost_regex

Результат все тот же - undefined reference to `boost::re_detail::perl_matcher.

GH12
() автор топика
Ответ на: комментарий от GH12

выброси нах буст.регекс и не трогай эту каку. В стандарт уже завезли, его пользуй. а bboost regex от версии к версии глючит иногда капец как.

anonymous
()
Ответ на: комментарий от GH12

путь саму либу не включает
скопируй в файл Makefile

CXX=g++
LDLIBS=-L/usr/lib/x86_64-linux-gnu/ -lboost_regex
кинь его рядом с tut2.cpp и в этой директории: make tut2

t1nman
()
Ответ на: комментарий от GH12

Не g++ tut2.cpp -o example -L/usr/lib/x86_64-linux-gnu/libboost_regex.a -lboost_regex а g++ tut2.cpp -o example -lboost_regex -lboost_iostreams

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от anonymous

Изначально я линковал другую программу. Вот ее результат: g++ base.cpp -o example -L../../../../usr/lib/x86_64-linux-gnu/libboost_program_options.a -lboost_program_options /tmp/ccsfavIK.o: In function `main': base.cpp:(.text+0x6a): undefined reference to `boost::program_options::options_description::options_description(std::string const&, unsigned int, unsigned int)' /tmp/ccsfavIK.o: In function `__static_initialization_and_destruction_0(int, int)': base.cpp:(.text+0x10d): undefined reference to `boost::system::generic_category()' base.cpp:(.text+0x119): undefined reference to `boost::system::generic_category()' base.cpp:(.text+0x125): undefined reference to `boost::system::system_category()' collect2: error: ld returned 1 exit status

, потом решил попробовать что-то попроще из tutorial-a. Результат не изменился, все тот же undefined reference. Поэтому boot::regex только для примера.

GH12
() автор топика
Ответ на: комментарий от EXL

base.cpp -o example -L../../../../usr/lib/x86_64-linux-gnu/ -lboost_program_options /tmp/ccRTBT0t.o: In function `main': base.cpp:(.text+0x6a): undefined reference to `boost::program_options::options_description::options_description(std::string const&, unsigned int, unsigned int)' /tmp/ccRTBT0t.o: In function `__static_initialization_and_destruction_0(int, int)': base.cpp:(.text+0x10d): undefined reference to `boost::system::generic_category()'

GH12
() автор топика
Ответ на: комментарий от EXL

Уже меньше на несколько ошибок. g++ base.cpp -o example -L../../../../usr/lib/x86_64-linux-gnu/ -lboost_system -lboost_program_options /tmp/ccwxb1Bk.o: In function `main': base.cpp:(.text+0x6a): undefined reference to `boost::program_options::options_description::options_description(std::string const&, unsigned int, unsigned int)' collect2: error: ld returned 1 exit status

GH12
() автор топика
Ответ на: комментарий от GH12

Это странно. Возможно установленная в систему библиотека Boost старая, а пример использует методы, доступные только в новой библиотеке.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Код - урезанная версия большого файла. Я повыкидал лишнее, чтобы найти ошибку линкования.

#include <boost/filesystem.hpp>
#include <boost/scoped_ptr.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/format.hpp>
#include <boost/foreach.hpp>

#include <boost/program_options/options_description.hpp>

#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>

using namespace std;
using namespace boost;

int main(int argc, char *argv[])
{
    boost::program_options::options_description desc("BaseApplication options");

  return 0;
}

GH12
() автор топика
Ответ на: комментарий от EXL

У меня на ноутбуке тоже линкуется.

Но нужно на стационарном компьютере.

А на нем никак не получается.

GH12
() автор топика
Ответ на: комментарий от GH12

Помогло удаление sudo apt-get autoremove libboost1.58-dev

и дальше

wget -O boost_1_55_0.tar.gz http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.gz/...

tar xzvf boost_1_55_0.tar.gz

cd boost_1_55_0/

sudo apt-get update

sudo apt-get install build-essential g++ python-dev autotools-dev libicu-dev build-essential libbz2-dev

./bootstrap.sh --prefix=/usr/local

sudo ./b2 install

Взято с stackoverflow.com.

GH12
() автор топика
Ответ на: комментарий от GH12

удалить пакет - sudo apt-get remove
autoremove удаляет ненужные пакеты, которые были установлены как зависимости

t1nman
()

Буст, сука, хитрая штука. Его лучше готовить самому, но это позже.

Сперва нужно разобраться в инфраструктуре GCC: кто за что отвечает, как устроен компилятор и линкер, какие параметры командной строки и на каком этапе используются.

А то, ты пишешь бред в командной строке, и искренне удивляешься почему это не работает.

Macil ★★★★★
()
Ответ на: комментарий от annulen

И что же такого бредового он написал?

Допустимо, но дело не в этом. Почитай топик дальше.

Macil ★★★★★
()
Ответ на: комментарий от GH12

Ты тупо взял комманды со SO и вбил их в терминал? Хоть бы поновее версию буста скачал что-ли.

rupert ★★★★★
()
Ответ на: комментарий от anonymous

Значит, мало им пользовался. Например, попробую слинковать прогу, использующую boost python в Дебиане. Если б питон был один, а так их два.

gag ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.