Xcode 5.0 Objective-C Project の 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) in 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 バーのアーキテクチャが x86_64 であることを確認しました。また、ブーストも内蔵OK。私は、この 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 の適切なターゲット構成に配置する方法を知りたいです。