我有一个C++库被Objective-C++项目引用。该库自行编译并且Objective-C++项目编译正常,直到我从库中实例化第一个类(使用对象指针)。在使用我的库中的类之前,我引用了不会导致问题的stl string
对象。交叉编译时出错C++/Objective-C++
,我发现了以下错误:
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)
到目前为止,我发现,像这样的错误可以由以下原因引起:
- 有.M的文件类型来代替。毫米
- 创建我的Objective-C++ C++对象,而无需使用指针
我假设它的索姆e类交叉编译错误,但我不知道在哪里寻找。想法可能是什么?
编辑:
Build Settings:
C++ Standard Library = libc++
C++ Language Dialect = c++0x
这些都是在我的顶级项目。包含的库也在使用它们(它也引用了外部库,并且在将其添加到我的主项目时不再找到标题路径 - 我必须将其添加到我的主项目设置中)。
编辑2: 下面是构建步骤失败:
LD /用户/ 用户 /库/开发商/ Xcode中/ DerivedData/BerkeleyDBHelloWorldSimulator-bgnkrqnronvtkoaongfsdturoklb /编译/产品/调试-iphonesimulator/BerkeleyDBHelloWorldSimulator。应用程序/ BerkeleyDBHelloWorldSimulator正常I386 坎德拉/用户/用户 /文件/项目/测试/ 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 /开发商/ Xcode中/ DerivedData/BerkeleyDBHelloWorldSimulator-bgnkrqnronvtkoaongfsdturoklb /编译/产品/调试-iphonesimulator -F /用户/用户 /库/开发商/ Xcode中/ DerivedData/BerkeleyDBHelloWorldSimulator-bgnkrqnronvtkoaongfsdturoklb /编译/产品/调试-iphonesimulator -filelist /用户/ 用户 /Library/Developer/Xcode/DerivedData/BerkeleyDBHelloWorldSimulator-bgnkrqnronvtkoaongfsdturoklb/Build/Intermediates/BerkeleyDBHelloWorldSimulator.build/Debug-iphonesimulator/BerkeleyDBHelloWorldSimulator.build/Objects-normal/i386/BerkeleyDBHelloWorldSimulator.LinkFileList -mmacosx版本分钟= 10 。 6 -Xlinker -objc_abi_version -Xlinker 2 -stdlib = libc的++ -Xlinker -no_implicit_dylibs -D__IPHONE_OS_VERSION_MIN_REQUIRED = 50000 -lstdC++ /用户/用户 /库/开发商/ Xcode中/ DerivedData/BerkeleyDBHelloWorldSimulator-bgnkrqnronvtkoaongfsdturoklb /建造/产品/调试-iphonesimulator/libBerkeleyDB .a -framework UIKit -framework Foundation -framework CoreGraphics -o/Users/user/Library/Developer/Xcode/DerivedData/BerkeleyDBHelloWorldSimulator -bgnkrqnronvtkoaongfsdturoklb/Build/Products/Debug-iphonesimulator/BerkeleyDBHelloWorldSimulator。应用程序/ BerkeleyDBHelloWorldSimulator
这些都不是整个错误,它将有助于引用它们的全部。虽然它们看起来像链接错误,但不是编译错误,所以你确定你正在链接到C++标准库? (libstdC++。dylib) – pmdj 2012-02-09 22:40:31
我剪掉的唯一东西就是库的名称。这是一个静态库,但不是一个dylib(我正在为iOS编译)。 – mydogisbox 2012-02-09 22:42:46
应该有*上面的*引用“行”,它会告诉你实际的错误。 (我仍怀疑链接错误)链接您的库或整体项目时发生错误吗?您的库是否与libstdC++或您的应用程序链接?或两者? – pmdj 2012-02-10 11:05:33