LINUX.ORG.RU

Не линкуется проект с boost::thread

 


0

2

Здравствуйте!
Пытаюсь собрать проект в Code::Blocks на Ubuntu. В проекте используется библиотека boost::thread. Файл /usr/lib/libboost_thread.so добавлен в Build Options -> Linker settings. Раньше, более мелкие проекты на boost::thread собирались без проблем, а теперь выдаются ошибки про undefined reference to `operator new'.
Например:

obj/Debug/Boards.o||In function `Boards::Boards(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
/home/kirill/BoardTest/Boards.cpp|34|undefined reference to `operator new(unsigned long)'

obj/Debug/Boards.o||In function `boost::exception_ptr boost::exception_detail::get_static_exception_object<boost::exception_detail::bad_alloc_>()':
/usr/include/boost/exception/detail/exception_ptr.hpp|125|undefined reference to `operator new(unsigned long)'

obj/Debug/Boards.o||In function `boost::exception_ptr boost::exception_detail::get_static_exception_object<boost::exception_detail::bad_exception_>()':
/usr/include/boost/exception/detail/exception_ptr.hpp|125|undefined reference to `operator new(unsigned long)'
И так далее. Раньше подключения /usr/lib/libboost_thread.so было всегда достаточно.
Подскажите пожалуйста, что еще ему нужно подключить, чтобы он перестал ругаться?
Заранее спасибо!

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

компилирю в Code Blocks, никаких команд не ввожу. Компилятор: gcc.
Если в Code::Blocks можно где то посмотреть эквивалентную команду для компиляции с консоли, то подскажите где

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

он пишет, что используется gcc, но мне кажется что компилирует он с помощью g++, так как до того как g++ был установлен, Code Blocks вообще отказывался что либо делать, требуя его установить, а после установки g++ начал компилировать

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

Поставил Code::Blocks, опции компиляции там указываются в Project → Build Options. Судя по всему, тебе нужно курить вкладку Linker settings

Насколько я понял, тип проекта (C или C++) указывается на стадии создания проекта.

theNamelessOne ★★★★★
()

А это уже означает, что линковщик не подключает стандартную библиотеку c++. Скорей всего используете именно gcc, а надо g++. Ищите в опциях.

Micky53
()

У C::B есть build log, покажи его целиком. Только не build messages, а именно build log. Полностью с командами, которые он вызывает.

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

Да, скорее всего что-то нужно там включить. Всегда при работе с boost::thread подключал там файл /usr/lib/libboost_thread.so. Но в данном случае возможно нужно еще что-то подключить дополнительно, но вопрос в том что именно

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

Вот содержимое build log:

-------------- Build: Debug in BoardTest ---------------

Compiling: DspLink/Board.cpp
Compiling: HostTest.cpp
Compiling: main.cpp
Linking console executable: bin/Debug/BoardTest
/usr/bin/ld: i386:x86-64 architecture of input file `obj/Debug/Boards.o' is incompatible with i386 output
obj/Debug/Boards.o: In function `Boards::Boards(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
/home/kirill/BoardTest/Boards.cpp:34: undefined reference to `operator new(unsigned long)'
obj/Debug/Boards.o: In function `boost::exception_ptr boost::exception_detail::get_static_exception_object<boost::exception_detail::bad_alloc_>()':
/usr/include/boost/exception/detail/exception_ptr.hpp:125: undefined reference to `operator new(unsigned long)'
obj/Debug/Boards.o: In function `boost::exception_ptr boost::exception_detail::get_static_exception_object<boost::exception_detail::bad_exception_>()':
/usr/include/boost/exception/detail/exception_ptr.hpp:125: undefined reference to `operator new(unsigned long)'
obj/Debug/Boards.o: In function `boost::detail::shared_count::shared_count<boost::exception_detail::clone_impl<boost::exception_detail::bad_alloc_> >(boost::exception_detail::clone_impl<boost::exception_detail::bad_alloc_>*)':
/usr/include/boost/smart_ptr/detail/shared_count.hpp:91: undefined reference to `operator new(unsigned long)'
obj/Debug/Boards.o: In function `boost::detail::shared_count::shared_count<boost::exception_detail::clone_impl<boost::exception_detail::bad_exception_> >(boost::exception_detail::clone_impl<boost::exception_detail::bad_exception_>*)':
/usr/include/boost/smart_ptr/detail/shared_count.hpp:91: undefined reference to `operator new(unsigned long)'
obj/Debug/Boards.o:/usr/include/c++/4.7/ext/new_allocator.h:94: more undefined references to `operator new(unsigned long)' follow
`.text._ZN5boost16exception_detail10bad_alloc_D2Ev' referenced in section `.text._ZN5boost16exception_detail10bad_alloc_D1Ev[boost::exception_detail::bad_alloc_::~bad_alloc_()]' of obj/Debug/DspLink/Board.o: defined in discarded section `.text._ZN5boost16exception_detail10bad_alloc_D2Ev[_ZN5boost16exception_detail10bad_alloc_D5Ev]' of obj/Debug/DspLink/Board.o
`.text._ZN5boost16exception_detail19error_info_injectorINS_10lock_errorEED2Ev' referenced in section `.text._ZN5boost16exception_detail19error_info_injectorINS_10lock_errorEED1Ev[boost::exception_detail::error_info_injector<boost::lock_error>::~error_info_injector()]' of obj/Debug/DspLink/Board.o: defined in discarded section `.text._ZN5boost16exception_detail19error_info_injectorINS_10lock_errorEED2Ev[_ZN5boost16exception_detail19error_info_injectorINS_10lock_errorEED5Ev]' of obj/Debug/DspLink/Board.o
`.text._ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10lock_errorEEEED2Ev' referenced in section `.text._ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10lock_errorEEEED1Ev[boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error> >::~clone_impl()]' of obj/Debug/DspLink/Board.o: defined in discarded section `.text._ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10lock_errorEEEED2Ev[_ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10lock_errorEEEED5Ev]' of obj/Debug/DspLink/Board.o
`.text._ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10lock_errorEEEED2Ev' referenced in section `.text._ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10lock_errorEEEED1Ev[boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error> >::~clone_impl()]' of obj/Debug/DspLink/Board.o: defined in discarded section `.text._ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10lock_errorEEEED2Ev[_ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10lock_errorEEEED5Ev]' of obj/Debug/DspLink/Board.o
`.text._ZN5boost16exception_detail10clone_implINS0_10bad_alloc_EED2Ev' referenced in section `.text._ZN5boost16exception_detail10clone_implINS0_10bad_alloc_EED1Ev[boost::exception_detail::clone_impl<boost::exception_detail::bad_alloc_>::~clone_impl()]' of obj/Debug/DspLink/Board.o: defined in discarded section `.text._ZN5boost16exception_detail10clone_implINS0_10bad_alloc_EED2Ev[_ZN5boost16exception_detail10clone_implINS0_10bad_alloc_EED5Ev]' of obj/Debug/DspLink/Board.o
`.text._ZN5boost16exception_detail10clone_implINS0_10bad_alloc_EED2Ev' referenced in section `.text._ZN5boost16exception_detail10clone_implINS0_10bad_alloc_EED1Ev[boost::exception_detail::clone_impl<boost::exception_detail::bad_alloc_>::~clone_impl()]' of obj/Debug/DspLink/Board.o: defined in discarded section `.text._ZN5boost16exception_detail10clone_implINS0_10bad_alloc_EED2Ev[_ZN5boost16exception_detail10clone_implINS0_10bad_alloc_EED5Ev]' of obj/Debug/DspLink/Board.o
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 4 seconds)
6 errors, 0 warnings
 

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

Settings -> Compiler -> Global compiler settings -> Other settings -> Compiler logging -> Full command line

Вот это интересует, а не «Task description»

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

дубль два:

-------------- Build: Debug in BoardTest ---------------

g++ -Wall -fexceptions  -g -lboost_system     -c /home/alex/Desktop/BoardTest/DspLink/Board.cpp -o obj/Debug/DspLink/Board.o
g++ -Wall -fexceptions  -g -lboost_system     -c /home/alex/Desktop/BoardTest/HostTest.cpp -o obj/Debug/HostTest.o
g++ -Wall -fexceptions  -g -lboost_system     -c /home/alex/Desktop/BoardTest/main.cpp -o obj/Debug/main.o
g++  -o bin/Debug/BoardTest obj/Debug/Boards.o obj/Debug/DspLink/Board.o obj/Debug/DspLink/Boards.o obj/Debug/DspLink/Coff.o obj/Debug/DspLink/Configuration.o obj/Debug/DspLink/Fpga.o obj/Debug/DspLink/Handlers.o obj/Debug/DspLink/Lexer.o obj/Debug/DspLink/ParseException.o obj/Debug/DspLink/Parser.o obj/Debug/DspLink/Task.o obj/Debug/HostTest.o obj/Debug/main.o    /usr/lib/libboost_thread.so 
/usr/bin/ld: i386:x86-64 architecture of input file `obj/Debug/Boards.o' is incompatible with i386 output
obj/Debug/Boards.o: In function `Boards::Boards(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
/home/kirill/BoardTest/Boards.cpp:34: undefined reference to `operator new(unsigned long)'
obj/Debug/Boards.o: In function `boost::exception_ptr boost::exception_detail::get_static_exception_object<boost::exception_detail::bad_alloc_>()':
/usr/include/boost/exception/detail/exception_ptr.hpp:125: undefined reference to `operator new(unsigned long)'
obj/Debug/Boards.o: In function `boost::exception_ptr boost::exception_detail::get_static_exception_object<boost::exception_detail::bad_exception_>()':
/usr/include/boost/exception/detail/exception_ptr.hpp:125: undefined reference to `operator new(unsigned long)'
obj/Debug/Boards.o: In function `boost::detail::shared_count::shared_count<boost::exception_detail::clone_impl<boost::exception_detail::bad_alloc_> >(boost::exception_detail::clone_impl<boost::exception_detail::bad_alloc_>*)':
/usr/include/boost/smart_ptr/detail/shared_count.hpp:91: undefined reference to `operator new(unsigned long)'
obj/Debug/Boards.o: In function `boost::detail::shared_count::shared_count<boost::exception_detail::clone_impl<boost::exception_detail::bad_exception_> >(boost::exception_detail::clone_impl<boost::exception_detail::bad_exception_>*)':
/usr/include/boost/smart_ptr/detail/shared_count.hpp:91: undefined reference to `operator new(unsigned long)'
obj/Debug/Boards.o:/usr/include/c++/4.7/ext/new_allocator.h:94: more undefined references to `operator new(unsigned long)' follow
`.text._ZN5boost16exception_detail10bad_alloc_D2Ev' referenced in section `.text._ZN5boost16exception_detail10bad_alloc_D1Ev[boost::exception_detail::bad_alloc_::~bad_alloc_()]' of obj/Debug/DspLink/Board.o: defined in discarded section `.text._ZN5boost16exception_detail10bad_alloc_D2Ev[_ZN5boost16exception_detail10bad_alloc_D5Ev]' of obj/Debug/DspLink/Board.o
`.text._ZN5boost16exception_detail19error_info_injectorINS_10lock_errorEED2Ev' referenced in section `.text._ZN5boost16exception_detail19error_info_injectorINS_10lock_errorEED1Ev[boost::exception_detail::error_info_injector<boost::lock_error>::~error_info_injector()]' of obj/Debug/DspLink/Board.o: defined in discarded section `.text._ZN5boost16exception_detail19error_info_injectorINS_10lock_errorEED2Ev[_ZN5boost16exception_detail19error_info_injectorINS_10lock_errorEED5Ev]' of obj/Debug/DspLink/Board.o
`.text._ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10lock_errorEEEED2Ev' referenced in section `.text._ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10lock_errorEEEED1Ev[boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error> >::~clone_impl()]' of obj/Debug/DspLink/Board.o: defined in discarded section `.text._ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10lock_errorEEEED2Ev[_ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10lock_errorEEEED5Ev]' of obj/Debug/DspLink/Board.o
`.text._ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10lock_errorEEEED2Ev' referenced in section `.text._ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10lock_errorEEEED1Ev[boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error> >::~clone_impl()]' of obj/Debug/DspLink/Board.o: defined in discarded section `.text._ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10lock_errorEEEED2Ev[_ZN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_10lock_errorEEEED5Ev]' of obj/Debug/DspLink/Board.o
`.text._ZN5boost16exception_detail10clone_implINS0_10bad_alloc_EED2Ev' referenced in section `.text._ZN5boost16exception_detail10clone_implINS0_10bad_alloc_EED1Ev[boost::exception_detail::clone_impl<boost::exception_detail::bad_alloc_>::~clone_impl()]' of obj/Debug/DspLink/Board.o: defined in discarded section `.text._ZN5boost16exception_detail10clone_implINS0_10bad_alloc_EED2Ev[_ZN5boost16exception_detail10clone_implINS0_10bad_alloc_EED5Ev]' of obj/Debug/DspLink/Board.o
`.text._ZN5boost16exception_detail10clone_implINS0_10bad_alloc_EED2Ev' referenced in section `.text._ZN5boost16exception_detail10clone_implINS0_10bad_alloc_EED1Ev[boost::exception_detail::clone_impl<boost::exception_detail::bad_alloc_>::~clone_impl()]' of obj/Debug/DspLink/Board.o: defined in discarded section `.text._ZN5boost16exception_detail10clone_implINS0_10bad_alloc_EED2Ev[_ZN5boost16exception_detail10clone_implINS0_10bad_alloc_EED5Ev]' of obj/Debug/DspLink/Board.o
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 5 seconds)
6 errors, 0 warnings

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

как видно из предыдущего моего сообщения - компилятор все-таки g++

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

Ну вот, другое дело, а вот, собственно, и причина:

/usr/bin/ld: i386:x86-64 architecture of input file `obj/Debug/Boards.o' is incompatible with i386 output
anonymous
()
Ответ на: комментарий от anonymous

хм, странно. Система 32 битная, проект написан года три назад тоже для 32 бит. Хотя я изначально создал этот проект в Code::Blocks на 64 битной машине а потом просто перенес на 32битную. сейчас попробую заново создать и пересобрать

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

Не помогло. Объясните пожалуйста поподробнее чем тут проблема? Я собираю сейчас на виртуальной машине под 32 битной убунтой. Вроде как там все 32 битное должно быть. Проект тоже под 32 бита писался

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

Телепатирую вопрос: что Вы там перенесли? Здесь не пишите, телепатируйте.

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

Во флаги к gcc добавить -m32 (Project -> Build options -> other options) и всё пересобрать.

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

И это, чудес не бывает. Может быть uname -m этой «32-битной убунты» всё-таки x86_64 возвращает?

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

А ещё есть подозрение, что помимо зоопарка ещё и бардак. И вот почему:

g++ -Wall -fexceptions  -g -lboost_system     -c /home/alex/Desktop/BoardTest/DspLink/Board.cpp

Но в то же время

/home/kirill/BoardTest/Boards.cpp:34: undefined reference to `operator new(unsigned long)'

То есть файлы нифига не компилируются и линкер берёт какие-то ископаемые версии из древней сборки, которые 64-битные как раз.

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

Удали все *.o файлы:

rm obj/Debug/Boards.o obj/Debug/DspLink/Board.o obj/Debug/DspLink/Boards.o obj/Debug/DspLink/Coff.o obj/Debug/DspLink/Configuration.o obj/Debug/DspLink/Fpga.o obj/Debug/DspLink/Handlers.o obj/Debug/DspLink/Lexer.o obj/Debug/DspLink/ParseException.o obj/Debug/DspLink/Parser.o obj/Debug/DspLink/Task.o obj/Debug/HostTest.o obj/Debug/main.o
После чего собери проект заново. И ещё, покажи на всякий случай вывод «g++ -v».

Micky53
()
Ответ на: комментарий от just_a_student

Всегда при работе с boost::thread подключал там файл /usr/lib/libboost_thread.so. Но в данном случае возможно нужно еще что-то подключить дополнительно, но вопрос в том что именно

ничего не нужно если только thread
ты добавил к линкеру -lboost_thread

Boy_from_Jungle ★★★★
()

Победа!

Господа, это какая то фантастика! Перепробовав безрезультатно все что можно я для чистоты совести создал на другом компьютере виртуальную машину с тем же образом Ubuntu. И все взяло и скомпилировалось! С первого же раза, без единого предупреждения. Чудеса какие-то!
Всем спасибо за помощь и советы, особенно анонимусу!

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

Твои проблемы с C::B очень смахивают на именно проблемы C::B. А среды и получше есть, и не одна (не буду рекламировать что-то конкретное).

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