【发布时间】:2017-02-18 20:03:33
【问题描述】:
我正在使用 Swift 和 Objective-C 构建一个 iOS 框架(由于其他限制,必须同时使用它们)。
在我的 Objective-c 代码中,我需要使用一个符号,称为 MyUndefinedSymbol,它将在运行时可用,但在编译和链接时不可用。
我将符号定义为extern 以消除编译器错误:
extern void MyUndefinedSymbol();
但是,链接器抱怨 MyUndefinedSymbol 未定义。
问题是:如何让链接器忽略那个未定义的符号?
搜索这个给我带来了很多解决方案,但都没有奏效。 我尝试过的事情:
- 使用
-undefined链接器标志。它已被弃用,并且不允许启用位码(我需要)。 - 使用 clang 的
-U标志。 - 使用
__attribute__((weak_import))添加weak_import属性 - 使用
--unresolved-symbols=ignore-all。
【问题讨论】:
-
运行时符号从何而来?
-
框架(本质上是一个插件)将被定义此符号的其他应用程序嵌入。 IOW,该符号将在这些应用程序的编译时可用,但在框架的编译时不可用...
-
您可以在运行时使用
dlsym()加载它... -
@MartinR,我认为这正是我所需要的!但是,我无法让它工作。我能够找到并使用作为框架一部分的符号,但找不到作为使用框架的应用程序一部分的符号。用
RTLD_DEFAULT尝试过。我错过了什么吗? -
它是在主可执行文件中定义为 C 还是 Swift 函数?
标签: ios objective-c swift xcode linker