问题描述
假设我有一个静态库,我们称之为 LibraryWithObjectiveC
。它是一个 C++ 库,但对于某些特定于平台的东西,我还被迫在其中包含一些 Objective-C 包装类,因为 Apple 不允许将该功能与普通 C 或 C++ 一起使用。
现在,这个静态库用于可执行文件,除其他外,它还允许使用 dlopen
加载外部共享库。它们实现了一个类似 COM 的接口,所以我们称它们为 COMLibrary
。其中一些库还需要 LibraryWithObjectiveC
提供的功能,并且由于它们被设计为也可以在其他地方使用,因此它们需要自己链接 LibraryWithObjectiveC
。
每当使用 dlopen
打开库时,这都会导致打印出一堆警告。警告是这样的:
objc[xxxxxx]:在 和 中都实现了 X 类。一 将使用两者中的一个。哪个是未定义的。
现在,这显然不会导致任何危害,因为符号完全相同,但由于可执行文件也有一些命令行功能,最好不要显示这些警告消息。
我尝试了以下方法:
- 隐藏objective-C 符号,这对于objective-c 类来说似乎是不可能的
- 从我的程序更改
stderr
,这不会停止来自 dlopen 的警告
我能想到的唯一解决方案是使 LibraryWithObjectiveC
成为一个共享库,但是这不是首选解决方案是有原因的。是否有另一种方法可以让加载程序认识到这些实际上是相同的符号,或者至少不要抱怨它?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)