2012-01-21 12 views
7

スタティックC++ライブラリとリンクするObjective-CデスクトップアプリケーションをビルドするためにXcodeを使用しようとしています。私はAppleのclangコンパイラを使用しています。C++スタティックライブラリへのObjective-Cアプリケーションのリンク

Apple clang version 3.0 (tags/Apple/clang-211.12) (based on LLVM 3.0svn) 
Target: x86_64-apple-darwin11.2.0 
Thread model: posix 
"/Developer/usr/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.7.0 -syslibroot /Developer/SDKs/MacOSX10.7.sdk -o /Users/andrew/Library/Developer/Xcode/DerivedData/sl-marketplace-analysis-exomzzahbygseghhwoeclcvpooeo/Build/Products/Debug/sl marketplace analyitics.app/Contents/MacOS/sl marketplace analyitics -lcrt1.10.6.o -L/Users/andrew/Library/Developer/Xcode/DerivedData/sl-marketplace-analysis-exomzzahbygseghhwoeclcvpooeo/Build/Products/Debug -L/Users/andrew/Projects/sl-marketplace-analysis/platform/mac/sl marketplace analyitics/../../../../../Library/Developer/Xcode/DerivedData/sl-marketplace-analysis-exomzzahbygseghhwoeclcvpooeo/Build/Products/Debug -filelist /Users/andrew/Library/Developer/Xcode/DerivedData/sl-marketplace-analysis-exomzzahbygseghhwoeclcvpooeo/Build/Intermediates/sl marketplace analyitics.build/Debug/sl marketplace analyitics.build/Objects-normal/x86_64/sl marketplace analyitics.LinkFileList -framework Cocoa -lcore -lSystem /Developer/usr/bin/../lib/clang/3.0/lib/darwin/libclang_rt.osx.a -F/Users/andrew/Library/Developer/Xcode/DerivedData/sl-marketplace-analysis-exomzzahbygseghhwoeclcvpooeo/Build/Products/Debug 
Undefined symbols for architecture x86_64: 
    "std::ios_base::Init::~Init()", referenced from: 
     ___cxx_global_var_init in libcore.a(test.o) 
    "std::ios_base::Init::Init()", referenced from: 
     ___cxx_global_var_init in libcore.a(test.o) 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

次のリンカーエラーが表示されます。C++標準ライブラリとリンクしていないようです。これが問題なのでしょうか?もしそうなら、私はそれがそれにリンクすることをどのように保証するのですか?

更新

私はビルドに空白のcppファイルを追加する場合は、すべてがコンパイルし、罰金実行されます。私はリンカにC++標準ライブラリとリンクするよう指示する方法が必要なようです。私はXcodeのすべてのビルド設定を調べてみましたが、役に立たないものは見つけられないようです。

答えて

17

を増やしてみてください-lstdC++または-lC++ "他のリンカフラグ" に :

enter image description here

+0

同じ問題が発生し、このソリューションを一日中探していましたそれを共有してくれてありがとう、魅力のように動作します –

+1

ありがとう!!!ありがとうd Objective-C、C++、およびObjective-C++の組み合わせである静的ライブラリ。ライブラリ自体にはビルド時にこのフラグは含まれていませんが、iOSアプリケーションでライブラリを使用する際に何らかの理由で必要となります。なぜ私は考えていない。 – jocull

+0

@jocull:静的ライブラリをビルドすると、結果のファイルはリンクされないので、アーカイブが最終アプリケーションの一部としてリンクされるまで、ライブラリは必要ありません。 –

1

libcore.aは、std::ios_base名前空間のInitという名前のクラスを探しています。私はが標準クラスだとは思わない。

libcore.aに実際にx86_64コードが含まれていることを確認してください。 fileコマンドを使用して確認することができます。たとえば:fileコマンドの出力は「for architecture x86_64」行が含まれていない場合は

$ file /usr/lib/libz.dylib 
/usr/lib/libz.dylib: Mach-O universal binary with 2 architectures 
/usr/lib/libz.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64 
/usr/lib/libz.dylib (for architecture i386): Mach-O dynamically linked shared library i386 

、あなたは、64ビットの実行可能ファイルを作成するためのライブラリを使用することはできません。 "設定の構築" の下で(C++ランタイムあなたの静的ライブラリが期待するに応じて)

+0

私はそのライブラリのコントロールも持っています(同じXcodeワークスペース内にビルドしています)、x86_64でビルドされています – drewag

-1

その他のリンカフラグ-lstdC++ Xcode5で私を助けてくれませんでした。 しかしアップルLLVM 5.0で同じよ​​うなことを見つける - Lnaguage - C++

デフォルトの設定では、のlibC++(LLVM C++標準〜blabla)だったと今そこににlibstdC++(GNUのもの)

にそれを変更リンクエラーはありません!今、私はそれがうまく動作することを確認する必要があります。

とにかくありがとうございました。 Xcodeの6と同じ問題を持っ

+0

同じ問題 - -lstdC++はXcode5で効果がないようです。この回答の推奨された修正は効果がありません。また、そうしないでください。 – Adam

+0

libC++を使用している場合、libC++とリンクする必要があります。 libstdC++(これは古くて非推奨なので、あまり使われていません)を使用している場合は、libstdC++とリンクする必要があります。 –

2

、私はリンクすることによってそれを解決した「のlibstdC++を。6.0.9.dylib-lstdC++その他 "への追加相&を構築する「ライブラリリンクバイナリ」でリンカーフラグ "ビルド設定

+0

Urmiありがとう、これは私の問題を解決しましたが、 "その他のリンカフラグ"に-lstdC++を追加する必要はありませんでした。私の場合、アプリケーションのターゲット自体は純粋なObj-Cであり、言語や標準ライブラリのどちらもC++は必要ありません。しかし、C++を大量に使用する外部の第三者スタティックライブラリ(たとえば、購入したオーディオ/ビデオエンジン)とリンクする必要があります。静的ライブラリなので、C++標準ライブラリをアプリケーションに追加することによって、 "助け"なければなりません。何らかの理由でXcodeは自動的にこれを行いません。 –

関連する問題