【问题标题】:Symbol collisions with Worklight static library与 Worklight 静态库的符号冲突
【发布时间】:2014-11-26 21:03:28
【问题描述】:

我将 Worklight 用于混合应用程序。为了扩展 iOS 功能,我尝试添加一个静态库。结果我从链接器收到了一个关于符号冲突newLiblibWorklightStaticLibProject 的错误。

我尝试在项目中包含库之前添加带有重新定义方法名称的头文件:

例如,对于我添加的方法_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 库具有相同依赖项的 3rd 方库?

【问题讨论】:

  • 提及您尝试使用的第 3 方库,以及您的 Worklight 版本和内部版本号。
  • 我尝试使用库 RtPKCS11ECP - 对蓝牙令牌进行数字签名的加密扩展。 Worklight 的版本是 6.2.0.01.20141120-1827
  • 有官方网站可以下载吗?
  • 好的,你可以从rutoken.ru/developers/sdk得到它
  • 我还有一个有冲突的 .o 文件列表(通过 Xcode 链接器)。 dropbox.com/s/1tx5gel66julzvd/…

标签: c++ ios ibm-mobilefirst static-libraries dependency-management


【解决方案1】:

在 libWorklightStaticLib.a 和 sqlcipher.framework 中确实有一些这样的符号。这很好。问题是这个库也在尝试添加这些。

一些尝试:

  1. 使用-all_load-force_load

    • -all_load 添加到链接器调用中。链接器标志将告诉链接器加载所有存档的所有目标文件,无论是否使用任何符号。

    • -force_load 添加到链接器调用中,包括存档路径。此标志的工作方式与 -all_load 完全相同,但仅适用于指定的存档。您可以在此处阅读更多相关信息:https://stackoverflow.com/a/22264650/186909

  2. 还有去除重复符号的教程,例如:

【讨论】:

  • 谢谢你,伊丹。这不是通用的解决方案,但在我的情况下它有效。我认为,这个问题可以在更新后回到未来。
猜你喜欢
  • 2020-06-23
  • 2020-11-03
  • 2020-08-01
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多