我将Worklight用于混合应用程序。为了扩展iOS功能,我尝试添加静态库。结果我遇到了Linker关于符号碰撞newLib
和libWorklightStaticLibProject
的错误。
在项目中包含库之前,我尝试使用重新定义方法名称添加头文件:
例如,对于方法_OBJC_CLASS_$_KeychainItemWrapper
,我添加了
#define _OBJC_CLASS_$_KeychainItemWrapper PREFIX_OBJC_CLASS_$_KeychainItemWrapper
#include "newLib/header.h"
#undef _OBJC_CLASS_$_KeychainItemWrapper
我还尝试更改.o文件的符号,但我无法将编辑过的.o文件合并到一个静态库中
部分连接器错误。
...
duplicate symbol _OBJC_CLASS_$_KeychainItemWrapper in:
[project_folder]/iphone/native/Classes/newLib.framework/newLib(KeychainItemWrapper.o)
[project_folder]/iphone/native/WorklightSDK/libWorklightStaticLibProject.a(KeychainItemWrapper.o)
duplicate symbol _OBJC_IVAR_$_KeychainItemWrapper.genericPasswordQuery in:
[project_folder]/iphone/native/Classes/newLib.framework/newLib(KeychainItemWrapper.o)
[project_folder]/iphone/native/WorklightSDK/libWorklightStaticLibProject.a(KeychainItemWrapper.o)
duplicate symbol _OBJC_IVAR_$_KeychainItemWrapper.keychainItemData in:
[project_folder]/iphone/native/Classes/newLib.framework/newLib(KeychainItemWrapper.o)
[project_folder]/iphone/native/WorklightSDK/libWorklightStaticLibProject.a(KeychainItemWrapper.o)
duplicate symbol _OBJC_METACLASS_$_KeychainItemWrapper in:
[project_folder]/iphone/native/Classes/newLib.framework/newLib(KeychainItemWrapper.o)
[project_folder]/iphone/native/WorklightSDK/libWorklightStaticLibProject.a(KeychainItemWrapper.o)
duplicate symbol _OBJC_CLASS_$_Reader in:
[project_folder]/iphone/native/Classes/newLib.framework/newLib(Reader.o)
[project_folder]/iphone/native/WorklightSDK/libWorklightStaticLibProject.a(Reader.o)
...
请帮我解决问题。我如何使用具有相同依赖关系的第三方库作为Worklight库?
答案 0 :(得分:1)
在libWorklightStaticLib.a和sqlcipher.framework中确实存在一些这些符号。哪个好。问题是这个库也试图添加这些。
有些事情要尝试:
使用-all_load
和-force_load
:
将-all_load
添加到链接器调用。链接器标志将告诉链接器加载所有存档的所有目标文件,无论是否使用任何符号。
将-force_load
添加到链接器调用,包括存档的路径。此标志与-all_load完全相同,但仅适用于指定的存档。您可以在此处详细了解:https://stackoverflow.com/a/22264650/186909
还有删除重复符号的教程,例如: