Соберите библиотеку libtorrent debian и свяжите ее с программой C++
У меня всегда возникают проблемы при сборке библиотек и их связывании, поэтому я надеюсь, что кто-нибудь может мне помочь.
Я скачал libtorrent отсюда, и я построил его, как они объясняют здесь, в building with autotools
раздел (пропуская шаг 1). Я думаю, что процесс строительства прошел успешно, но когда я это сделал make check
вывод был:
============================================================================
Testsuite summary for libtorrent-rasterbar 1.0.5
============================================================================
# TOTAL: 0
# PASS: 0
# SKIP: 0
# XFAIL: 0
# FAIL: 0
# XPASS: 0
# ERROR: 0
============================================================================
Может быть, стоит сказать: всего Х?
Я сделал небольшую программу, где я добавил #include <libtorrent/session.hpp>
и когда я собираю с g++ file.cpp -o file
это говорит libtorrent/session.hpp: No such file or directory
,
Должен ли я добавить некоторые флаги в g++, такие как -lpthread
для других проектов и так думает?
Спасибо
ОБНОВЛЕНИЕ: при установке без сборки с использованием sudo apt-get install libtorrent-rasterbar-dev
и компилируя мой файл main.cpp, я получаю эту ошибку:
g++ main.cpp -o file
In file included from /usr/include/libtorrent/session.hpp:49:0,
from main.cpp:2:
/usr/include/libtorrent/config.hpp:46:2: error: #error you must define either BOOST_ASIO_SEPARATE_COMPILATION or BOOST_ASIO_DYN_LINK in your project in order for asio's declarations to be correct. If you're linking dynamically against libtorrent, define BOOST_ASIO_DYN_LINK otherwise BOOST_ASIO_SEPARATE_COMPILATION. You can also use pkg-config or boost build, to automatically apply these defines
#error you must define either BOOST_ASIO_SEPARATE_COMPILATION or BOOST_ASIO_DYN_LINK in your project in \
ОБНОВЛЕНИЕ 2:
Модифицированный main.cpp
файл, чтобы добавить следующее выше libtorrent #include
директивы:
#ifndef BOOST_ASIO_DYN_LINK
#define BOOST_ASIO_DYN_LINK
#endif
Но тогда у меня есть эта проблема:
$ g++ main.cpp
/tmp/ccM2ItFb.o: In function `main':
main.cpp:(.text+0x57): undefined reference to `libtorrent::default_storage_constructor(libtorrent::file_storage const&, libtorrent::file_storage const*, std::string const&, libtorrent::file_pool&, std::vector<unsigned char, std::allocator<unsigned char> > const&)'
main.cpp:(.text+0xb9): undefined reference to `libtorrent::session::~session()'
main.cpp:(.text+0x105): undefined reference to `libtorrent::session::~session()'
/tmp/ccM2ItFb.o: In function `__static_initialization_and_destruction_0(int, int)':
main.cpp:(.text+0x162): undefined reference to `boost::system::generic_category()'
main.cpp:(.text+0x16e): undefined reference to `boost::system::generic_category()'
main.cpp:(.text+0x17a): undefined reference to `boost::system::system_category()'
main.cpp:(.text+0x192): undefined reference to `boost::asio::error::get_netdb_category()'
main.cpp:(.text+0x19e): undefined reference to `boost::asio::error::get_addrinfo_category()'
main.cpp:(.text+0x1aa): undefined reference to `boost::asio::error::get_misc_category()'
/tmp/ccM2ItFb.o: In function `boost::asio::error::get_system_category()':
main.cpp (.text._ZN5boost4asio5error19get_system_categoryEv[_ZN5boost4asio5error19get_system_categoryEv]+0x5): undefined reference to `boost::system::system_category()'
/tmp/ccM2ItFb.o: In function `libtorrent::session::session(libtorrent::fingerprint const&, int, unsigned int)':
main.cpp:(.text._ZN10libtorrent7sessionC2ERKNS_11fingerprintEij[_ZN10libtorrent7sessionC5ERKNS_11fingerprintEij]+0x3c): undefined reference to `libtorrent::rel_clocktime_pools_nolog_resolvecountries_deprecated_dht_ext_()'
main.cpp:(.text._ZN10libtorrent7sessionC2ERKNS_11fingerprintEij[_ZN10libtorrent7sessionC5ERKNS_11fingerprintEij]+0x75): undefined reference to `libtorrent::session::init(std::pair<int, int>, char const*, libtorrent::fingerprint const&, int, unsigned int)'
/tmp/ccM2ItFb.o: In function `void boost::checked_delete<libtorrent::torrent_info const>(libtorrent::torrent_info const*)':
main.cpp:(.text._ZN5boost14checked_deleteIKN10libtorrent12torrent_infoEEEvPT_[_ZN5boost14checked_deleteIKN10libtorrent12torrent_infoEEEvPT_]+0x1a): undefined reference to `libtorrent::torrent_info::~torrent_info()'
collect2: error: ld returned 1 exit status
Также попытался скомпилировать с помощью: g++ -I /usr/include/ -L /usr/local/lib -lboost_system -lpthread -lboost_thread main.cpp
с тем же результатом.
ОБНОВЛЕНИЕ 3:
Я смог решить проблему. Я должен был скомпилировать с помощью: g++ -I /usr/include/ -L /usr/local/lib -lboost_system -lpthread -lboost_thread main.cpp
и добавить также библиотеку ссылок -ltorrent-rasterbar
1 ответ
Похоже, вы скомпилировали библиотеку, но фактически нигде не устанавливали ее. #include
директива выглядит в /usr/include
по умолчанию, но заголовки libtorrent находятся где-то в каталоге, где вы создали библиотеку. Вам нужно будет либо установить файлы библиотеки в системные каталоги, либо дать компилятору -I
опция, указывающая на каталог сборки libtorrent. (Вам, вероятно, также понадобится -L
вариант при линковке, по той же причине.)