Summary: | не хватает boost.system | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Alexandre Prokoudine <alexandre.prokoudine> |
Component: | boost-filesystem-devel | Assignee: | Ivan A. Melnikov <iv> |
Status: | CLOSED NOTABUG | QA Contact: | qa-sisyphus |
Severity: | normal | ||
Priority: | P2 | CC: | iv, ldv, php-coder, sem |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux |
Description
Alexandre Prokoudine
2008-12-11 21:23:56 MSK
Boost.System в 1.36.0-altX является частью пакета boost-devel, от которого boost-filesystem-devel зависит, поэтому всё, что необходимо, уже должно присутсвовать в вашей системе. В логах по ссылке заметил единственную существенную ошибку: configure:26176: g++ -o conftest -g -O2 -DNDEBUG -DNDEBUG -pedantic -Wall -Wcast-align -Wcast-qual -Wpointer-arith -Wreturn-type -I/usr/include -L/usr/lib conftest.o -lboost_filesystem-mt >&5 conftest.o: In function `__static_initialization_and_destruction_0': /usr/include/boost/system/error_code.hpp:205: undefined reference to `boost::system::get_system_category()' /usr/include/boost/system/error_code.hpp:206: undefined reference to `boost::system::get_generic_category()' /usr/include/boost/system/error_code.hpp:210: undefined reference to `boost::system::get_generic_category()' /usr/include/boost/system/error_code.hpp:211: undefined reference to `boost::system::get_generic_category()' /usr/include/boost/system/error_code.hpp:212: undefined reference to `boost::system::get_system_category()' collect2: ld returned 1 exit status это ошибка компоновщика, которая говорит, что * в вашей системе есть заголовочные файлы из Boost.System * приложению, (пусть и не напрямую) включающему их, необходимо явно компоноваться с -lboost_system-mt. Попробуйте объяснить это configure. Могу и сам посмотреть, если дадите ссылку на исходники (с наскока не осознал, где же у них правильный svn. Я так понимаю, тарболов они пока не выкладывали?). И ещё, Alexandre, не могли бы вы показать (для полной уверенности) вывод следующих команд: $ rpm -qa boost-devel $ ls /usr/lib/*boost*.so Заранее благодарю. svn checkout http://svn.gnome.org/svn/niepce/trunk niepce Только что переехал туда из gna.org, но роли это не играет. Возникает подозрение, что это из-за специфических правил линковки в альте :-/ Хотя еще два месяца назад собиралось, да и до сих пор вот на машинке старая версия программы запускается. $ rpm -qa boost-devel boost-devel-1.36.0-alt3 $ ls -lh /usr/lib/*boost*.so lrwxrwxrwx 1 root root 31 Окт 20 17:15 /usr/lib/libboost_date_time-mt.so -> libboost_date_time-mt.so.1.36.0 lrwxrwxrwx 1 root root 28 Окт 20 17:15 /usr/lib/libboost_date_time.so -> libboost_date_time.so.1.36.0 lrwxrwxrwx 1 root root 32 Окт 20 17:15 /usr/lib/libboost_filesystem-mt.so -> libboost_filesystem-mt.so.1.36.0 lrwxrwxrwx 1 root root 29 Окт 20 17:15 /usr/lib/libboost_filesystem.so -> libboost_filesystem.so.1.36.0 lrwxrwxrwx 1 root root 27 Окт 20 17:15 /usr/lib/libboost_graph-mt.so -> libboost_graph-mt.so.1.36.0 lrwxrwxrwx 1 root root 24 Окт 20 17:15 /usr/lib/libboost_graph.so -> libboost_graph.so.1.36.0 lrwxrwxrwx 1 root root 31 Окт 20 17:15 /usr/lib/libboost_iostreams-mt.so -> libboost_iostreams-mt.so.1.36.0 lrwxrwxrwx 1 root root 28 Окт 20 17:15 /usr/lib/libboost_iostreams.so -> libboost_iostreams.so.1.36.0 lrwxrwxrwx 1 root root 38 Окт 20 17:15 /usr/lib/libboost_prg_exec_monitor-mt.so -> libboost_prg_exec_monitor-mt.so.1.36.0 lrwxrwxrwx 1 root root 35 Окт 20 17:15 /usr/lib/libboost_prg_exec_monitor.so -> libboost_prg_exec_monitor.so.1.36.0 lrwxrwxrwx 1 root root 27 Окт 20 17:15 /usr/lib/libboost_regex-mt.so -> libboost_regex-mt.so.1.36.0 lrwxrwxrwx 1 root root 24 Окт 20 17:15 /usr/lib/libboost_regex.so -> libboost_regex.so.1.36.0 lrwxrwxrwx 1 root root 35 Окт 20 17:15 /usr/lib/libboost_serialization-mt.so -> libboost_serialization-mt.so.1.36.0 lrwxrwxrwx 1 root root 32 Окт 20 17:15 /usr/lib/libboost_serialization.so -> libboost_serialization.so.1.36.0 lrwxrwxrwx 1 root root 29 Окт 20 17:15 /usr/lib/libboost_signals-mt.so -> libboost_signals-mt.so.1.36.0 lrwxrwxrwx 1 root root 26 Окт 20 17:15 /usr/lib/libboost_signals.so -> libboost_signals.so.1.36.0 lrwxrwxrwx 1 root root 28 Окт 20 17:15 /usr/lib/libboost_system-mt.so -> libboost_system-mt.so.1.36.0 lrwxrwxrwx 1 root root 25 Окт 20 17:15 /usr/lib/libboost_system.so -> libboost_system.so.1.36.0 lrwxrwxrwx 1 root root 28 Окт 20 17:15 /usr/lib/libboost_thread-mt.so -> libboost_thread-mt.so.1.36.0 lrwxrwxrwx 1 root root 41 Окт 20 17:15 /usr/lib/libboost_unit_test_framework-mt.so -> libboost_unit_test_framework-mt.so.1.36.0 lrwxrwxrwx 1 root root 38 Окт 20 17:15 /usr/lib/libboost_unit_test_framework.so -> libboost_unit_test_framework.so.1.36.0 lrwxrwxrwx 1 root root 26 Окт 20 17:15 /usr/lib/libboost_wave-mt.so -> libboost_wave-mt.so.1.36.0 lrwxrwxrwx 1 root root 23 Окт 20 17:15 /usr/lib/libboost_wave.so -> libboost_wave.so.1.36.0 lrwxrwxrwx 1 root root 36 Окт 20 17:15 /usr/lib/libboost_wserialization-mt.so -> libboost_wserialization-mt.so.1.36.0 lrwxrwxrwx 1 root root 33 Окт 20 17:15 /usr/lib/libboost_wserialization.so -> libboost_wserialization.so.1.36.0 (In reply to comment #2) > Возникает подозрение, что это из-за специфических правил линковки в альте :-/ Правила они такие, да. Помогают ошибки находить, которые у других не видны. Не факт, что это такая уж ошибка в апстриме. Вот минималистичный пример: $ ls testme.cpp $ cat testme.cpp #include <boost/filesystem/path.hpp> int main() { return 0; } $ g++ testme.cpp -lboost_filesystem /home/iv/tmp/ccw8YQ4k.o: In function `__static_initialization_and_destruction_0(int, int)': testme.cpp:(.text+0x29): undefined reference to `boost::system::get_system_category()' testme.cpp:(.text+0x35): undefined reference to `boost::system::get_generic_category()' testme.cpp:(.text+0x41): undefined reference to `boost::system::get_generic_category()' testme.cpp:(.text+0x4d): undefined reference to `boost::system::get_generic_category()' testme.cpp:(.text+0x59): undefined reference to `boost::system::get_system_category()' collect2: ld returned 1 exit status $ g++ testme.cpp -lboost_filesystem -lboost_system $ ls a.out testme.cpp Ну и на всякий случай: $ ldd /usr/lib64/libboost_filesystem.so | grep system libboost_system.so.1.36.0 => /usr/lib64/libboost_system.so.1.36.0 (0x00007f1e97a33000) Мне почему-то казалось, что такие зависимости должны разрешаться компоновщиком, и похоже раньше (пару месяцев назад, по словам OP) разрешались. Я чего-то недопонимаю или это проблема нового тулчейна? 2ldv@: мне кажется, здесь нужен ваш совет. (In reply to comment #4) > Не факт, что это такая уж ошибка в апстриме. Вот минималистичный пример: > > $ ls > testme.cpp > $ cat testme.cpp > > #include <boost/filesystem/path.hpp> > > int main() > { > return 0; > } > > $ g++ testme.cpp -lboost_filesystem > /home/iv/tmp/ccw8YQ4k.o: In function `__static_initialization_and_destruction_0(int, int)': > testme.cpp:(.text+0x29): undefined reference to `boost::system::get_system_category()' > testme.cpp:(.text+0x35): undefined reference to `boost::system::get_generic_category()' > testme.cpp:(.text+0x41): undefined reference to `boost::system::get_generic_category()' > testme.cpp:(.text+0x4d): undefined reference to `boost::system::get_generic_category()' > testme.cpp:(.text+0x59): undefined reference to `boost::system::get_system_category()' > collect2: ld returned 1 exit status > $ g++ testme.cpp -lboost_filesystem -lboost_system > $ ls > a.out testme.cpp Ситуация типичная: testme.o использует -lboost_system вместо -lboost_filesystem, но не линкуется с этой библиотекой; --as-needed быстро выявляет такие ошибки. В случае необходимости частого объезда можно превратить libboost_filesystem.so в linker script наподобие libncurses.so @ldv Это всё очень мило, но апстриму-то что говорить? :) (In reply to comment #6) > @ldv > > Это всё очень мило, но апстриму-то что говорить? :) Говорить: please adjust your test ... to link also with -lboost_system. |