N_A*_*N_A 7 c++ compiler-errors objective-c++
我有一个Objective-C++项目引用的C++库.该库自身编译良好,Objective-C++项目编译良好,直到我从库中实例化第一个类(使用对象指针).在使用我的库中的类之前,我引用了string不会导致问题的stl 对象.
我收到以下错误:
Undefined symbols for architecture i386:
"std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from:
__verify_callback_c in *************.a(cxx_db.o)
DbEnv::_stream_message_function(__db_env const*, char const*) in *************.a(cxx_env.o)
DbEnv::_stream_error_function(__db_env const*, char const*, char const*) in *************.a(cxx_env.o)
"std::basic_ios<char, std::char_traits<char> >::fail() const", referenced from:
__verify_callback_c in *************.a(cxx_db.o)
"std::ios_base::Init::Init()", referenced from:
__static_initialization_and_destruction_0(int, int) in *************.a(cxx_db.o)
__static_initialization_and_destruction_0(int, int) in *************.a(cxx_dbc.o)
__static_initialization_and_destruction_0(int, int) in *************.a(cxx_dbt.o)
__static_initialization_and_destruction_0(int, int) in *************.a(cxx_env.o)
__static_initialization_and_destruction_0(int, int) in *************.a(cxx_mpool.o)
__static_initialization_and_destruction_0(int, int) in *************.a(cxx_txn.o)
__static_initialization_and_destruction_0(int, int) in *************.a(cxx_lock.o)
...
"std::ios_base::Init::~Init()", referenced from:
___tcf_0 in *************.a(cxx_db.o)
___tcf_0 in *************.a(cxx_dbc.o)
___tcf_0 in *************.a(cxx_dbt.o)
___tcf_0 in *************.a(cxx_env.o)
___tcf_0 in *************.a(cxx_mpool.o)
___tcf_0 in *************.a(cxx_txn.o)
___tcf_0 in *************.a(cxx_lock.o)
...
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我发现像这样的错误可能是由以下原因引起的:
我假设它是某种交叉编译错误,但我不知道在哪里看.关于它可能是什么的想法?
编辑:
Build Settings:
C++ Standard Library = libc++
C++ Language Dialect = c++0x
Run Code Online (Sandbox Code Playgroud)
这些都在我的顶级项目中.包含的库也使用它们(它也引用了一个外部库,并且在将它添加到我的主项目时不再找到标题路径 - 我必须将它添加到我的主项目设置中).
编辑2:这是失败的构建步骤:
LD /用户/ 用户 /Library/Developer/Xcode/DerivedData/BerkeleyDBHelloWorldSimulator-bgnkrqnronvtkoaongfsdturoklb/Build/Products/Debug-iphonesimulator/BerkeleyDBHelloWorldSimulator.app/BerkeleyDBHelloWorldSimulator正常i386的CD /用户/ 用户 /文件/项目/测试/ BerkeleyDBHelloWorldSimulator SETENV MACOSX_DEPLOYMENT_TARGET 10.6 SETENV PATH"/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang ++ -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk -L/Users/user/Library/Developer/Xcode/DerivedData/BerkeleyDBHelloWorldSimulator-bgnkrqnronvtkoaongfsdturoklb/Build/Products/Debug-iphonesimulator -F/Users/user/Library/Developer/Xcode/DerivedData/BerkeleyDBHelloWorldSimulator -bgnkrqnronvtkoaongfsdturoklb/Build/Products/Debug-iphonesimulator -filelist/Users/user/Library/Developer/Xcode/DerivedData/Berkel eyDBHelloWorldSimulator -bgnkrqnronvtkoaongfsdturoklb/Build/Intermediates/BerkeleyDBHelloWorldSimulator.build/Debug-iphonesimulator/BerkeleyDBHelloWorldSimulator.build/Objects-normal/i386/BerkeleyDBHelloWorldSimulator.LinkFileList -mmacosx-version-min = 10.6 -Xlinker -objc_abi_version -Xlinker 2 -stdlib = libc ++ -Xlinker -no_implicit_dylibs -D__IPHONE_OS_VERSION_MIN_REQUIRED = 50000 -lstdc ++/Users/user /Library/Developer/Xcode/DerivedData/BerkeleyDBHelloWorldSimulator-bgnkrqnronvtkoaongfsdturoklb/Build/Products/Debug-iphonesimulator/libBerkeleyDB.a-framework UIKit -framework Foundation -framework CoreGraphics -o/Users/user /Library/Developer/Xcode/DerivedData/BerkeleyDBHelloWorldSimulator-bgnkrqnronvtkoaongfsdturoklb/Build/Products/Debug-iphonesimulator/BerkeleyDBHelloWorldSimulator.app/BerkeleyDBHelloWorldSimulator
我们花了一些时间在评论主题中找到接近解决方案的东西,所以我将在这里总结一下:
这种类型的错误是由于未成功链接到正确libstdc++.dylib的标准C++库引起的.有时,你忘记添加它,有时XCode会感到困惑.
首先,确保您确实在应用目标的设置中链接到它:它必须出现在"构建阶段","链接二进制文件库"中.
如果它在那里,但仍然无法链接,请检查原始构建日志中是否有XCode可能隐藏的任何警告:例如关于错误的体系结构.这意味着您将链接到错误的文件版本 - 例如链接到模拟器或OSX版本而不是iPhoneOSx.y.sdk目录中的版本.在过去,使用XCode 3,这很容易出错,解决它的唯一方法是尝试libstdc++.dylibXCode提供的每一个不同的东西,直到一个工作.除了带有版本号的名称外,XCode4通常只提供一个.您通常应选择没有版本号的dylib.
确保可能链接的所有子项目libstdc++.dylib在同一位置使用相同的版本.
检查"库搜索路径"和"框架搜索路径",查看您未自行添加的任何路径.我在这里有XCode设置旧SDK的路径,这使链接器感到困惑.
最后,有时只需删除引用libstdc++.dylib,清理项目,退出并重新启动XCode,然后重新添加引用即可.
| 归档时间: |
|
| 查看次数: |
4082 次 |
| 最近记录: |