【发布时间】:2018-03-20 14:47:20
【问题描述】:
我在我的应用程序中使用了第 3 方静态库(这意味着我无法重新编译它)。
该库是使用 -stdlib=libstdc++ 构建的,即为了与 macOS 版本 stdlib=libc++。
但这意味着我的所有应用程序代码都必须使用 -stdlib=libstdc++ 构建,这使我无法使用某些 C++11 功能。
所以我尝试将此静态库转换为共享库,但随后符号不可见。
实际上,使用 nm 我可以看到它们被标记为 t 而不是 T,这在静态链接时似乎没问题,但在动态链接时却不行。
我想将我需要的符号的可见性更改为全局。
我不确定如何在 macOS 上实现它,因为 objcopy 在这里不可用(它作为一个名为--globalize-symbol 的选项似乎可以满足我的需求,根据this SO answer)
【问题讨论】:
-
objcopy是binutils的一部分,[AFAICT] 可用于 macOS。来自源代码或:macappstore.org/binutils 在“binutils mac OS”上进行网络搜索会产生其他链接
标签: c++ c macos shared-libraries visibility