2017-06-13 14 views
0

私は迅速な事前経験はありません。C/C++ライブラリを使用したスウィフトリンクとビルド

私は静的ライブラリlibseriallib.aを持っていますが、これはC++で書かれていますが、extern Cを使ってCラッパーインターフェイスを持っています。

このライブラリを迅速なiOSアプリケーションにリンクしたいと考えています。私は最初からこのアプリケーションを作成しています。

libseriallib.aに依存するライブラリが3つあります。これらは、libz.a、 'libcrypto.a , libssh.a`です。

私はhere(モジュールの使用)という2番目の方法に従って、プロジェクトを構築しようとしました。しかし、私は3つの依存関係をどのようにリンクして正常に構築するのか混乱しています。今はXCode Build Phases->Link Binary With Librariesセクションにlibseriallib.aを追加しました。私は今このように見えてきた

エラー:私もlibstd++をリンクするために持っているよう

Apple Mach-O Linker Warning Group 
ld: warning: URGENT: building for iOS simulator, but linking in object file (/Users/duminda/dev/swiftlibtest/libseriallib.a(seriallib.cpp.o)) built for OSX. Note: This will be an error in the future. 

ld: warning: object file (/Users/duminda/dev/swiftlibtest/libseriallib.a(seriallib.cpp.o)) was built for newer OSX version (10.11) than being linked (10.0) 

ld: warning: URGENT: building for iOS simulator, but linking in object file (/Users/duminda/dev/swiftlibtest/libseriallib.a(mem_buffer.cpp.o)) built for OSX. Note: This will be an error in the future. 

ld: warning: object file (/Users/duminda/dev/swiftlibtest/libseriallib.a(mem_buffer.cpp.o)) was built for newer OSX version (10.11) than being linked (10.0) 

ld: warning: URGENT: building for iOS simulator, but linking in object file (/Users/duminda/dev/swiftlibtest/libseriallib.a(buffers.cpp.o)) built for OSX. Note: This will be an error in the future. 

ld: warning: object file (/Users/duminda/dev/swiftlibtest/libseriallib.a(buffers.cpp.o)) was built for newer OSX version (10.11) than being linked (10.0) 

ld: warning: URGENT: building for iOS simulator, but linking in object file (/Users/duminda/dev/swiftlibtest/libseriallib.a(packet_reader2.cpp.o)) built for OSX. Note: This will be an error in the future. 

ld: warning: object file (/Users/duminda/dev/swiftlibtest/libseriallib.a(packet_reader2.cpp.o)) was built for newer OSX version (10.11) than being linked (10.0) 

Apple Mach-O Linker Error Group 
    "std::runtime_error::what() const", referenced from: 

    "std::__1::__basic_string_common<true>::__throw_length_error() const", referenced from: 

    "std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from: 

    "std::__1::ios_base::getloc() const", referenced from: 

    "std::runtime_error::runtime_error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from: 

は今、それが見えます。

C/C++ライブラリとスピーディーなiOSアプリケーションをリンクするための包括的なリソースはありますか?

ご協力いただければ幸いです。

答えて

0

は、あなたがそこにあなたがseriallibcryptozsshのように、リンクする必要があり、すべてのLIBSの一覧を表示する必要がBuild settings -> Other linker flags

に見てみましょう。

また、あなたが、これはどのようなリンカーであり(あなたはこれらのライブラリを用意して、それらのすべてが、実際のSDKのバージョンや構成用にコンパイルすることをあなたが使用していることを確認し、これらのlibsはBuild settings -> Library search paths

経由で見つけることができるパスを設定する必要がありますOS XとiOSの違いを教えてくれる)

0

この場合、モジュールマップを使用する必要はありません。 Build Phases->Link Binary With LibrariesセクションまたはBuild Settings -> Other Linker Flagsに4つの静的ライブラリをすべて追加できます。その場合は、-lseriallib -lcrypto -lz -lsshと指定する必要があります。どちらの場合も、ikliashchouのように、パスをに追加する必要があります。

C++シンボルに関するエラーについては、-lc++Other Linker Flagsを追加することで解決できます。これは、ラッパーが別のライブラリーである場合です。ラッパーコードがプロジェクトの一部である場合、これらのエラーは発生しません。

アーキテクチャに関する警告は、アプリがシミュレータで実行されることを妨げません(現時点では)。ただし、デバイスで実行しようとすると、静的なライブラリはiOSデバイスのアーキテクチャ用に構築されていないため、ビルドされません。

デバイスの静的ライブラリにコードをビルドすることは、それ自体がトピックであり、扱いにくいことがあります。考慮すべきいくつかのこと:

は役に立つかもしれませんいくつかのリンクです

関連する問題