Найти - Пользователи
Полная версия: Проблема сборки libtorrent
Начало » Python для экспертов » Проблема сборки libtorrent
1
ZZZ
Ребят, я уже много чего перепробовал…
Глюк такой. Собрал libtorrent. Нормально. А вот питоньи биндинги к нему не собираются. Вот вывод:
 pts/2 /opt/PyQt4/src/libtorrent-0.13/bindings/python $ nice -n 19 /opt/PyQt4/bin/bjam --includedir=/opt/PyQt4/include
BOOST_ROOT = /opt/PyQt4/src/boost_1_35_0
OS = LINUX
warning: Graph library does not contain optional GraphML reader.
note: to enable GraphML support, set EXPAT_INCLUDE and EXPAT_LIBPATH to the
note: directories containing the Expat headers and libraries, respectively.
warning: skipping optional Message Passing Interface (MPI) library.
note: to enable MPI support, add "using mpi ;" to user-config.jam.
note: to suppress this message, pass "--without-mpi" to bjam.
note: otherwise, you can safely ignore this message.
Building Boost.Regex with the optional Unicode/ICU support disabled.
Please refer to the Boost.Regex documentation for more information
(don't panic: this is a strictly optional feature).
warning: No toolsets are configured.
warning: Configuring default toolset "gcc".
warning: If the default is wrong, your build may not work correctly.
warning: Use the "--toolset=xxxxx" option to override our guess.
warning: For more configuration options, please consult
warning: http://boost.org/boost-build2/doc/html/bbv2/advanced/configuration.html
...patience...
...patience...
...found 3570 targets...
...updating 2 targets...
gcc.link.dll ../../bin/gcc-3.4.5/debug/threading-multi/libtorrent.so
/usr/lib/gcc/i686-pc-linux-gnu/3.4.5/../../../../i686-pc-linux-gnu/bin/ld: cannot find -lboost_thread
collect2: ld returned 1 exit status

"g++" -L"/opt/local/lib" -L"/sw/lib" -L"/usr/lib" -L"/usr/local/lib" -o "../../bin/gcc-3.4.5/debug/threading-multi/libtorrent.so" -Wl,-h -Wl,libtorrent.so -shared -Wl,--start-group "../../bin/gcc-3.4.5/debug/threading-multi/assert.o" "../../bin/gcc-3.4.5/debug/threading-multi/file.o" "../../bin/gcc-3.4.5/debug/threading-multi/closest_nodes.o" "../../bin/gcc-3.4.5/debug/threading-multi/dht_tracker.o" "../../bin/gcc-3.4.5/debug/threading-multi/find_data.o" "../../bin/gcc-3.4.5/debug/threading-multi/node.o" "../../bin/gcc-3.4.5/debug/threading-multi/node_id.o" "../../bin/gcc-3.4.5/debug/threading-multi/refresh.o" "../../bin/gcc-3.4.5/debug/threading-multi/routing_table.o" "../../bin/gcc-3.4.5/debug/threading-multi/rpc_manager.o" "../../bin/gcc-3.4.5/debug/threading-multi/traversal_algorithm.o" "../../bin/gcc-3.4.5/debug/threading-multi/pe_crypto.o" "../../bin/gcc-3.4.5/debug/threading-multi/adler32.o" "../../bin/gcc-3.4.5/debug/threading-multi/compress.o" "../../bin/gcc-3.4.5/debug/threading-multi/crc32.o" "../../bin/gcc-3.4.5/debug/threading-multi/deflate.o" "../../bin/gcc-3.4.5/debug/threading-multi/gzio.o" "../../bin/gcc-3.4.5/debug/threading-multi/infback.o" "../../bin/gcc-3.4.5/debug/threading-multi/inffast.o" "../../bin/gcc-3.4.5/debug/threading-multi/inflate.o" "../../bin/gcc-3.4.5/debug/threading-multi/inftrees.o" "../../bin/gcc-3.4.5/debug/threading-multi/trees.o" "../../bin/gcc-3.4.5/debug/threading-multi/uncompr.o" "../../bin/gcc-3.4.5/debug/threading-multi/zutil.o" "../../bin/gcc-3.4.5/debug/threading-multi/alert.o" "../../bin/gcc-3.4.5/debug/threading-multi/connection_queue.o" "../../bin/gcc-3.4.5/debug/threading-multi/entry.o" "../../bin/gcc-3.4.5/debug/threading-multi/escape_string.o" "../../bin/gcc-3.4.5/debug/threading-multi/http_connection.o" "../../bin/gcc-3.4.5/debug/threading-multi/http_stream.o" "../../bin/gcc-3.4.5/debug/threading-multi/identify_client.o" "../../bin/gcc-3.4.5/debug/threading-multi/ip_filter.o" "../../bin/gcc-3.4.5/debug/threading-multi/peer_connection.o" "../../bin/gcc-3.4.5/debug/threading-multi/bt_peer_connection.o" "../../bin/gcc-3.4.5/debug/threading-multi/web_peer_connection.o" "../../bin/gcc-3.4.5/debug/threading-multi/instantiate_connection.o" "../../bin/gcc-3.4.5/debug/threading-multi/natpmp.o" "../../bin/gcc-3.4.5/debug/threading-multi/piece_picker.o" "../../bin/gcc-3.4.5/debug/threading-multi/policy.o" "../../bin/gcc-3.4.5/debug/threading-multi/session.o" "../../bin/gcc-3.4.5/debug/threading-multi/session_impl.o" "../../bin/gcc-3.4.5/debug/threading-multi/socks4_stream.o" "../../bin/gcc-3.4.5/debug/threading-multi/socks5_stream.o" "../../bin/gcc-3.4.5/debug/threading-multi/stat.o" "../../bin/gcc-3.4.5/debug/threading-multi/storage.o" "../../bin/gcc-3.4.5/debug/threading-multi/torrent.o" "../../bin/gcc-3.4.5/debug/threading-multi/torrent_handle.o" "../../bin/gcc-3.4.5/debug/threading-multi/torrent_info.o" "../../bin/gcc-3.4.5/debug/threading-multi/tracker_manager.o" "../../bin/gcc-3.4.5/debug/threading-multi/http_tracker_connection.o" "../../bin/gcc-3.4.5/debug/threading-multi/udp_tracker_connection.o" "../../bin/gcc-3.4.5/debug/threading-multi/sha1.o" "../../bin/gcc-3.4.5/debug/threading-multi/metadata_transfer.o" "../../bin/gcc-3.4.5/debug/threading-multi/upnp.o" "../../bin/gcc-3.4.5/debug/threading-multi/ut_pex.o" "../../bin/gcc-3.4.5/debug/threading-multi/logger.o" "../../bin/gcc-3.4.5/debug/threading-multi/file_pool.o" "../../bin/gcc-3.4.5/debug/threading-multi/lsd.o" "../../bin/gcc-3.4.5/debug/threading-multi/disk_io_thread.o" "../../bin/gcc-3.4.5/debug/threading-multi/enum_net.o" "../../bin/gcc-3.4.5/debug/threading-multi/broadcast_socket.o" -Wl,-Bstatic -Wl,-Bdynamic -lboost_thread -lboost_filesystem -lcrypto -lrt -Wl,--end-group -g -pthread -export-dynamic

...failed gcc.link.dll ../../bin/gcc-3.4.5/debug/threading-multi/libtorrent.so...
...skipped <pbin/gcc-3.4.5/debug>libtorrent.so for lack of <p../../bin/gcc-3.4.5/debug/threading-multi>libtorrent.so...
...failed updating 1 target...
...skipped 1 target...
Т.е. фактически он не может слинковать готовую библиотеку. С/С++ я уже давно забыл, но как-то решить надо.

P.S. Руками пересобрал boost. Не помогло.
poltergeist
“cannot find -lboost_thread” - не находятся boost_thread и другие скомпиленные бинарники из boost-а, они возможно не проинсталлены по стандартным путям, так?
slivlen
poltergeist
“cannot find -lboost_thread” - не находятся boost_thread и другие скомпиленные бинарники из boost-а, они возможно не проинсталлены по стандартным путям, так?
Или devel пакет boost не установлен. Хотя если руками его пересобирал и не помогло, то скорее всего нестандартные пути.
Андрей Светлов
на линуксе boost даже при установке руками (что предпочтительней, ибо свежий 1.35 не всегда последний в пакетах для сборки) прописывает себя правильно по умолчанию
ZZZ
Сорри, ребят, с утра был уже никакой… Засыпал на ходу, вот и не разобрался.
Пути действительно не стандартные, но environment верный. Т.е. все PATH, CPATH, LD_LIBRARY_PATH и причие PYTHONPATH выставлены правильно. Питон 2.5, PyQt4 и ещё несколько программ и библиотек, поставленных там, собрались и работают нормально. Дело в том, что я уже очень давно не обновлял Gentoo… где-то с 2006-го года… меня всё устраивает. Вот дождусь 2008.0 и пересобиру систему, а пока буду выделываться с экспортом окружения для определённого набора программ.

Проблема в том, что я впервые увидел bjam. Мне он, в общем-то, понравился, но первый опыт оказался неудачный.

Теперь же я собрал всё, что требуется (просто убрав -lboost_thread и -lboost_filesystem). Но оно не заработало. При попытке импортировать в питоне libtorrent:
>>> import libtorrent
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: libboost_thread-gcc34-mt-1_35.so.1.35.0: cannot open shared object file: No such file or directory
libboost_thread-gcc34-mt-1_35.so.1.35.0 лежит в либах. Пробовал класть его вмесле с libtorrent.so (вот не помню, должен ли он искать сишные либы рядом с собой?), но ошибка не изменилась. Мне кажется, что это немного странно.

Что думаю. Моей системе не долго жить осталось… Если я собиру бууст в /usr? Не должно быть проблем, сейчас попробую. О том, что получится – напишу.

P.S. У меня в системе стоит 1.31…
ZZZ
Итак. Собрал и установил boost в /usr. Без проблем.
Собрал libtorrent. Получил libtorrent.so. Кинул в /usr/lib, для надёжности. На этот раз без проблем.
Собрал биндинг. Во время сборки обратил внимание на то, что он ещё что-то дособирает в boost. Как? Дело в переменной BOOST_BUILD_PATH, которая ведёт к /opt/PyQt4/src/boost_1_35_0. Без неё не собирался ни сам libtorrent, ни биндинг – т.е. матерился на её отсутствие. Ладно, собрал и слава богу. Получил libtorrent.so, который ушёл в site-packages питона. Хорошо.
>>> import libtorrent
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: libboost_python-gcc34-1_35.so.1.35.0: cannot open shared object file: No such file or directory
Плохо.
В /usr/lib лежит libboost_python-gcc34-mt-1_35.so.1.35.0.
Нужная либа нашлась в /opt/PyQt4/src/boost_1_35_0/bin.v2/libs/python/build/gcc-3.4.5/release/boost-source. Странно. Я же с mt собирал… Кинул её в /usr/lib

>>> import libtorrent
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: /opt/PyQt4/lib/python2.5/site-packages/libtorrent.so: undefined symbol: _ZNK10libtorrent14torrent_handle9save_pathEv
Я в ступоре. Чё делать-то, человеки?
Просто никогда с этим не сталкивался.
Перекопал собранный boost – там только одна либа без mt (libboost_python-gcc34-1_35.so.1.35.0).
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB