我正在使用 worklight、一个名为 wikiitude 的增强现实插件和一个名为 sqlcipher 的框架。虽然我在为设备或存档构建时在 iOS 上运行良好,但当我尝试为模拟器构建时,会出现一个我从未见过的警告,然后是大量重复的符号错误:
ld: warning: tentative definition of '_OPENSSL_ia32cap_P' with size 8 from '/Users/mine/apps/wl/iphone/native/Frameworks/sqlcipher.framework/sqlcipher(cryptlib.o)'
is being replaced by real definition of smaller size 4 from '/Users/mine/apps/wl/iphone/native/libWikitudeSDK.a(cryptlib.o)'
然后这个错误(截断):
duplicate symbol _CRYPTO_THREADID_cmp in:
/Users/mine/apps/wl/iphone/native/Frameworks/sqlcipher.framework/sqlcipher(cryptlib.o)
/Users/mine/apps/wl/iphone/native/libWikitudeSDK.a(cryptlib.o)
.
.
.
duplicate symbol _OpenSSLDie in:
/Users/mine/apps/wl/iphone/native/Frameworks/sqlcipher.framework/sqlcipher(cryptlib.o)
/Users/mine/apps/wl/iphone/native/libWikitudeSDK.a(cryptlib.o)
ld: 33 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Wikitude 通过 libWikitudeSDK.a 包含在项目中,并且处于与库构建阶段的链接中,而 sqlcipher 是在同一位置添加的 .framework。我的其他链接器标志设置为 -ObjC ,因为当我们使用 -all_load 时,它在 wikitudeSDK 和 worklightSDK 之间导致了相同的重复符号问题。
我已按照此博客中关于如何避免重复错误的说明进行操作,但是虽然它解决了 cryptlib.o 的一个问题,但它只会打开数百个新的重复符号错误。我在构建新库时也尝试了 lipo -arch_blank i386 ,但这只会导致架构 i386 错误的未定义符号。
需要明确的是,我并没有尝试在模拟器中运行增强现实组件,我只是想使用模拟器为我的应用程序的其他方面进行开发,这些方面不依赖于维基百科。
虽然暂时从项目中删除 wikiitude 是一种选择,但项目中的版本控制只是让所有相关人员感到头疼,并引入了额外的不必要的复杂性。
提前感谢您的任何见解。