2014-03-01 19 views
2

我一直在拉我的头发,试图将我的iOS应用程序与arm64库链接。图书馆无法为特定体系结构链接的可能原因?

有问题的库是Crypto ++。我试过了wiki中的预编译fat库:http://www.cryptopp.com/wiki/IOS_(Command_Line)。我试过编译库自己,但我不断收到以下类型的链接错误:

"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(char const*, unsigned long, unsigned long)", referenced from: 
     std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > std::__1::operator+<char, std::__1::char_traits<char>, std::__1::allocator<char> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const*) in libcryptopp.a(randpool.o) 
     std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > std::__1::operator+<char, std::__1::char_traits<char>, std::__1::allocator<char> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const*) in libcryptopp.a(modes.o) 

的libcryptopp.a似乎是罚款的ARMv7,但不适合arm64出于某种原因。如果我从链接过程中排除libcryptopp.a的64位版本,则会产生更多错误。

他们都使用-stdlib汇编= ++的libstdc

这是怎么回事?

(我需要的,因为TWEAK发展的原因arm64支持)

更新对不起所有的 - 事实证明它是使用旧libcryptopp.a,而无法正常找到libcryptopp.a。 .a源自其他地方,已经修复。

+2

在'libC++'命名空间中找到用于连接字符串的'+运算符'时遇到问题..您需要链接到libC++。 '-stdlib = libC++'NOT'-stdlib = libstdC++'我知道它看起来像一个小细节,但它发生的事情比它应该的多得多。 – Brandon

+0

@CantChooseUsernames但指令说-stdlib = libstdC++,并且在使用libstdC++编译库时不会与libC++链接导致错误? – kamziro

+0

你不是在建造它吗?也许你也可以直接链接到它,看看会发生什么。为什么要使用'-stdlib = libC++':http://stackoverflow.com/questions/16352833/linking-with-clang-on-os-x-generates-lots-of-symbol-not-found-errors和http://stackoverflow.com/questions/9000816/libc-stop-std-renaming-to-std-1 – Brandon

回答

1

“std :: __ 1 :: basic_string,std :: __ 1 :: allocator> :: __ init(char const *,unsigned long,unsigned long)”,引用自:... libcryptopp.a(randpool的.o)

这个库已经建成,并取决于LLVM的C++运行时libc++ GNU C++运行时libstdc++

他们都使用-stdlib汇编=的libstdC++

您需要要么重建libcryptopp.alibstdc++链路与-stdlib=libc++(并建立您对libc++代码的其余部分,以及)。


如果感兴趣,__1是用于版本控制的内联命名空间。请参阅What are inline namespaces for?Where does the __1 symbol come from when using LLVM's libc++?

+0

引用的wiki页面提供了[Xcode Project](http://www.cryptopp.com)下的解决方案之一/维基/ IOS_(COMMAND_LINE)#Xcode_Project)。 – jww

+0

实际上,我自己编译库,并确保它们使用-libstdC++,以便该语句没有错。我之前尝试过预编译的库,但没有工作(我猜是因为它与libC++链接) – kamziro