2013-05-16 20 views
2

我最近開始研究將levelDB集成到我的項目中的podSpec文件。 (https://github.com/iljaiwas/Podspecs/blob/master/LevelDBPodSpec/0.0.1/leveldb.podspecCocoaPods:使用libPods.a中定義的C++符號鏈接

然而,當我引用任何C++符號從主要目標一個.mm文件,我得到一個鏈接錯誤是這樣的:

Undefined symbols for architecture x86_64: 
"leveldb::DB::Open(leveldb::Options const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, leveldb::DB**)", referenced from: 
    -[IHLevelDBContext initWithPath:] in IHLevelDBContext.o 

這是編譯器調用的樣子

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk -L/Users/ilja/Library/Developer/Xcode/DerivedData/LevelDBTest2-aiflqgbevhxzfxbrsdamteybrbao/Build/Products/Debug -F/Users/ilja/Library/Developer/Xcode/DerivedData/LevelDBTest2-aiflqgbevhxzfxbrsdamteybrbao/Build/Products/Debug -filelist /Users/ilja/Library/Developer/Xcode/DerivedData/LevelDBTest2-aiflqgbevhxzfxbrsdamteybrbao/Build/Intermediates/LevelDBTest2.build/Debug/LevelDBTest2.build/Objects-normal/x86_64/LevelDBTest2.LinkFileList -mmacosx-version-min=10.7 -ObjC -fobjc-arc -fobjc-link-runtime -stdlib=libc++ -framework Cocoa -lPods -o /Users/ilja/Library/Developer/Xcode/DerivedData/LevelDBTest2-aiflqgbevhxzfxbrsdamteybrbao/Build/Products/Debug/LevelDBTest2.app/Contents/MacOS/LevelDBTest2 

從我的理解,缺少:: Open調用包含在libPods.a

nm libPods.a | grep "Open" 

      U __ZN7leveldb2DB4OpenERKNS_7OptionsERKSsPPS0_ 
000000000005e5b1 s L___func__._ZN7leveldb6DBImpl24OpenCompactionOutputFileEPNS0_15CompactionStateE 
00000000000099d0 T __ZN7leveldb2DB4OpenERKNS_7OptionsERKSsPPS0_ 
0000000000060ba0 S __ZN7leveldb2DB4OpenERKNS_7OptionsERKSsPPS0_.eh 

看來我可以通過更改「編譯」設置從蘋果LLVM 4.2 LLVM GCC 4.2的主應用程序繞過鏈接錯誤,但這個編譯器扼流圈的Objective-C 2.0的功能,如:

expected a property attribute before 'strong' 

感謝對我可能是做錯了任何指針, ILJA

回答

1

問題走了後,我設置了「C++標準庫」中都應用目標和的CocoaPods設定目標,以「編譯器的默認」。似乎默認情況下它們被設置爲不兼容的值,這導致鏈接器之後的混淆。

9

您也可以在podspec文件中設置了C++配置設置:

s.library = 'c++' 
    s.xcconfig = { 
     'CLANG_CXX_LANGUAGE_STANDARD' => 'c++11', 
     'CLANG_CXX_LIBRARY' => 'libc++' 
    } 

這些設置選擇要編譯C++ 2011和添加的libC++標準庫。

+1

只需添加s.library ='C++'爲我工作 –

相關問題