我正在尝试使用 Xcode 5.0 Objective-C 项目中的 libtorrent 库但没有成功。
我已经使用 LLVM 5.0 从源代码构建了 boost 1.54 和 libtorrent-rasterbar(最新),这没有问题。此外,通过 MacPorts,我获得了 pkg-config 以获得 libtorrent-rasterbar 库的正确 cflags。从我的构建设置中,pkgconfig libs 和 cflags 的输出是:
-DTORRENT_USE_OPENSSL -DWITH_SHIPPED_GEOIP_H
-DBOOST_ASIO_HASH_MAP_BUCKETS=1021
-DBOOST_EXCEPTION_DISABLE -DBOOST_ASIO_ENABLE_CANCELIO
-DBOOST_ASIO_DYN_LINK -DTORRENT_LINKING_SHARED -I/usr/local/include
-I/usr/local/include/libtorrent
-L/usr/local/lib -ltorrent-rasterbar
自然,我将这些参数添加到 Xcode 的“链接器标志”和“C/C++ 标志”设置中。
不幸的是,我无法让我调用的函数正确链接。这是我在 testclass.cpp 文件中编写的示例类:
#include "libtorrent/entry.hpp"
#include "libtorrent/bencode.hpp"
#include "libtorrent/torrent_info.hpp"
#include "libtorrent/file.hpp"
#include "libtorrent/storage.hpp"
#include "libtorrent/hasher.hpp"
#include "libtorrent/create_torrent.hpp"
void testclass::addFilesFromPath(const char* path)
{
libtorrent::file_storage fs;
libtorrent::add_files(fs, path);
}
试图从 createpackage.mm 文件中调用:
testclass* pPackage = new testclass();
testclass->addFilesFromPath([_sessionDir UTF8String]);
链接器找不到符号,输出为:
架构 x86_64 的未定义符号:
“libtorrent::parent_path(std::__1::basic_string, std::__1::allocator > const&)”,引用自:libtorrent::add_files(libtorrent::file_storage&, std::__1: :basic_string, std::__1::allocator > const&, unsigned int) in createpackage.o
"libtorrent::detail::add_files_impl(libtorrent::file_storage&, std::__1::basic_string, std::__1::allocator > const&, std::__1::basic_string, std::__1::allocator > const&, boost::function, std::__1::allocator >)>, unsigned int)”,引用自:libtorrent::add_files(libtorrent ::file_storage&, std::__1::basic_string, std::__1::allocator > const&, unsigned int) 在 createpackage.o
“libtorrent::complete(std::__1::basic_string, std::__1::allocator > const&)”,引用自:libtorrent::add_files(libtorrent::file_storage&, std::__1::basic_string, std:: __1::allocator > const&, unsigned int) in createpackage.o
"libtorrent::filename(std::__1::basic_string, std::__1::allocator > const&)",引用自:libtorrent::add_files(libtorrent: :file_storage&, std::__1::basic_string, std::__1::allocator > const&, unsigned int) in createpackage.o ld:未找到架构 x86_64 的符号 clang:错误:链接器命令失败,退出代码为 1 (使用 -v 查看调用)
我很困惑。检查 libtorrent-raster bar 架构是 x86_64。此外,boost 构建良好。我是这种 C++ / Objetive-C 代码混合方法的新手。
谢谢。
编辑1:
我采用了最小的样本。制作了以下CPP文件:
#include "libtorrent/file.hpp"
#include "libtorrent/storage.hpp"
#include "libtorrent/create_torrent.hpp"
int main()
{
libtorrent::file_storage fs;
libtorrent::add_files(fs, ".");
}
在命令行,尝试:
c++ test.cpp $(pkg-config /usr/local/lib/pkgconfig/libtorrent-rasterbar.pc --cflags --libs) -lboost_system
构建成功。所以我想知道如何将所有 pkg-config 数据放入 OSX 中的正确目标配置中。