使用LLVM c+;时出现大量链接器错误+;11和libc++; 我在XCODE中用C++编写了一个项目。我想使用智能指针,所以我把C++语言方言改为C++ 11和C++标准库到LBC+++。p>
现在,当我尝试运行我的项目时,我会遇到大量链接器错误 我在我的项目中使用AppGAMEKIT 2 C++库,名为使用LLVM c+;时出现大量链接器错误+;11和libc++; 我在XCODE中用C++编写了一个项目。我想使用智能指针,所以我把C++语言方言改为C++ 11和C++标准库到LBC+++。p>,c++,xcode,c++11,llvm-clang,libc++,C++,Xcode,C++11,Llvm Clang,Libc++,现在,当我尝试运行我的项目时,我会遇到大量链接器错误 我在我的项目中使用AppGAMEKIT 2 C++库,名为LabAbkMAC。我可以看出这是错误的根源,但我不知道为什么 错误示例如下: Undefined symbols for architecture i386: "std::string::find(char, unsigned long) const", referenced from: zxing::oned::Code39Reader::decodeRow(int, zxin
Undefined symbols for architecture i386:
"std::string::find(char, unsigned long) const", referenced from:
zxing::oned::Code39Reader::decodeRow(int, zxing::Ref<zxing::BitArray>) in libAGKMac.a(Code39Reader.o)
"std::string::substr(unsigned long, unsigned long) const", referenced from:
zxing::oned::MultiFormatUPCEANReader::decodeRow(int, zxing::Ref<zxing::BitArray>) in libAGKMac.a(MultiFormatUPCEANReader.o)
zxing::oned::UPCAReader::maybeReturnResult(zxing::Ref<zxing::Result>) in libAGKMac.a(UPCAReader.o)
zxing::oned::UPCEReader::convertUPCEtoUPCA(std::string) in libAGKMac.a(UPCEReader.o)
"std::string::compare(std::string const&) const", referenced from:
std::map<std::string, zxing::common::CharacterSetECI*, std::less<std::string>, std::allocator<std::pair<std::string const, zxing::common::CharacterSetECI*> > >::operator[](std::string const&) in libAGKMac.a(CharacterSetECI.o)
std::_Rb_tree<std::string, std::pair<std::string const, zxing::common::CharacterSetECI*>, std::_Select1st<std::pair<std::string const, zxing::common::CharacterSetECI*> >, std::less<std::string>, std::allocator<std::pair<std::string const, zxing::common::CharacterSetECI*> > >::_M_insert_unique(std::_Rb_tree_iterator<std::pair<std::string const, zxing::common::CharacterSetECI*> >, std::pair<std::string const, zxing::common::CharacterSetECI*> const&) in libAGKMac.a(CharacterSetECI.o)
std::_Rb_tree<std::string, std::pair<std::string const, zxing::common::CharacterSetECI*>, std::_Select1st<std::pair<std::string const, zxing::common::CharacterSetECI*> >, std::less<std::string>, std::allocator<std::pair<std::string const, zxing::common::CharacterSetECI*> > >::_M_insert(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::pair<std::string const, zxing::common::CharacterSetECI*> const&) in libAGKMac.a(CharacterSetECI.o)
std::_Rb_tree<std::string, std::pair<std::string const, zxing::common::CharacterSetECI*>, std::_Select1st<std::pair<std::string const, zxing::common::CharacterSetECI*> >, std::less<std::string>, std::allocator<std::pair<std::string const, zxing::common::CharacterSetECI*> > >::_M_insert_unique(std::pair<std::string const, zxing::common::CharacterSetECI*> const&) in libAGKMac.a(CharacterSetECI.o)
std::_Rb_tree<std::string, std::pair<std::string const, zxing::common::CharacterSetECI*>, std::_Select1st<std::pair<std::string const, zxing::common::CharacterSetECI*> >, std::less<std::string>, std::allocator<std::pair<std::string const, zxing::common::CharacterSetECI*> > >::lower_bound(std::string const&) in libAGKMac.a(CharacterSetECI.o)
zxing::multi::GenericMultipleBarcodeReader::doDecodeMultiple(zxing::Ref<zxing::BinaryBitmap>, zxing::DecodeHints, std::vector<zxing::Ref<zxing::Result>, std::allocator<zxing::Ref<zxing::Result> > >&, int, int) in libAGKMac.a(GenericMultipleBarcodeReader.o)
"std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const", referenced from:
zxing::BitMatrix::description() in libAGKMac.a(BitMatrix.o)
zxing::common::CharacterSetECI::getCharacterSetECIByValue(int) in libAGKMac.a(CharacterSetECI.o)
zxing::common::ECI::getECIByValue(int) in libAGKMac.a(ECI.o)
zxing::GridSampler::checkAndNudgePoints(zxing::Ref<zxing::BitMatrix>, std::vector<float, std::allocator<float> >&) in libAGKMac.a(GridSampler.o)
zxing::GF256Poly::description() const in libAGKMac.a(GF256Poly.o)
zxing::LuminanceSource::operator std::string() in libAGKMac.a(LuminanceSource.o)
zxing::oned::Code128Reader::decodeRow(int, zxing::Ref<zxing::BitArray>) in libAGKMac.a(Code128Reader.o)
...
架构i386的未定义符号:
“std::string::find(char,unsigned long)const”,引用自:
libAGKMac.a(Code39Reader.o)中的zxing::oned::Code39Reader::decodeRow(int,zxing::Ref)
“std::string::substr(无符号长、无符号长)常量”,引用自:
libAGKMac.a(MultiFormatUPCEANReader.o)中的zxing::oned::MultiFormatUPCEANReader::decodeRow(int,zxing::Ref)
libAGKMac.a(UPCAReader.o)中的zxing::oned::UPCAReader::mayberturnresult(zxing::Ref)
libAGKMac.a(UPCEReader.o)中的zxing::oned::UPCEReader::convertUPCEtoUPCA(std::string)
“std::string::compare(std::string const&)const”,引用自:
libAGKMac.a(CharacterSetECI.o)中的std::map::operator[](std::string const&)
libAGKMac.a(CharacterSetECI.o)中的std::_Rb_tree::_M_insert_unique(std:_Rb_tree_迭代器,std::pair const&)
libAGKMac.a(CharacterSetECI.o)中的std::_Rb_tree::_M_insert(std:_Rb_tree_node_base*,std:_Rb_tree_node_base*,std::pair const&)
std::_Rb_tree::_M_insert_unique(std::pair const&)在libAGKMac.a(CharacterSetECI.o)中
libAGKMac.a(CharacterSetECI.o)中的std::_Rb_tree::下限(std::string const&)
libAGKMac.a(GenericMultipleBarcodeReader.o)中的zxing::multi::GenericMultipleBarcodeReader::dodecodemiple(zxing::Ref,zxing::decodeHits,std::vector&,int,int)
“std::basic_stringbuf::str()const”,引用自:
libAGKMac.a(BitMatrix.o)中的zxing::BitMatrix::description()
zxing::common::CharacterSetECI::libAGKMac.a(CharacterSetECI.o)中的getCharacterSetECIByValue(int)
libAGKMac.a(ECI.o)中的zxing::common::ECI::getECIByValue(int)
libAGKMac.a(GridSampler.o)中的zxing::GridSampler::checkandnumedgepoints(zxing::Ref,std::vector&)
libAGKMac.a(GF256Poly.o)中的zxing::GF256Poly::description()常量
libAGKMac.a(LuminanceSource.o)中的zxing::LuminanceSource::operator std::string()
libAGKMac.a(Code128Reader.o)中的zxing::oned::Code128Reader::decodeRow(int,zxing::Ref)
...
错误日志的完整输出可在此处找到:如果使用与代码不同的标准库编译您正在使用的库,则可能会发生这种情况。可能是用
libstdc++
编译的
要解决此问题,如果可以,您必须使用libc++
重新编译库,或者查看使用libc++
的二进制库是否可用
另一个可疑的问题是错误消息中提到的
i386
体系结构。您是否有可能编译32位体系结构?(我不熟悉Mac开发,但我认为它在很长一段时间内不支持i386?这将不起作用,因为您没有做很多工作
这是你得到的
(仅二进制),它显然是针对libstdc构建的++AppGameKit 2
- 您的代码链接到AppGameKit 2,因此必须构建它
- libstdc++的一个非常旧的版本(来自GCC4.2.1)——这就是苹果公司提供的(而且几乎可以肯定的是,
就是用这个版本构建的)AppGameKit 2
auto\u ptr
,但它有std::tr1
之类的东西)
您可以在Mac上安装新版本(比如4.9)的gcc,并用它构建代码(以及一个现代的libstdc++
),然后链接到AppGameKit 2
。这可能会起作用,但该设置中的任何问题都将。。。很难调试。我不推荐
或者,您可以使用
std::tr1::shared_ptr
,但这也不是一个好的长期解决方案。您需要使用相同的语言和标准库配置重新编译AppGameKit.Ah。那不是我的选择。这个库是预编译的,因为它是一个付费的封闭源代码产品。那么你为什么选择使用libc++
?您可以使用libstdc++
。标志:-std=c++11-stdlib=libstdc++-arch i386-arch x86_64
,因为如果我使用libstdc++
,它会给我错误,说像智能指针这样的东西不存在。我确实是将我的程序编译为32位程序。这是因为制作该库的人拒绝提供64位版本,理由是这是不必要的。作为一种解决方法,您可以尝试使用软件包管理器安装更新版本的GCC(我不是mac用户,但我相信您可以使用“自制”)。不过,我不知道它是否能与XCode一起工作。是的,我会检查这个选项。我可能无法强制Xcode使用不同的编译器,但我会尝试一下。