避免在 Linux 下的共享对象 C 接口上重整名称

Avoid name mangling on a shared object C interface under linux

本文关键字:接口 对象 Linux 共享      更新时间:2023-10-16

在Windows下,我们有一个C接口(extern "C" {//interface })到我们的C++库,它使用模块定义文件(.def)导出未修改的函数。

正在尝试在 linux 下重新创建同样的东西,而我相对缺乏经验。我知道在NIX系统下,默认情况下会导出所有功能。考虑到这一点,我创建了一个共享对象,并通过 nm 命令运行了该对象。

我很惊讶地发现,与在窗口中不同,我的函数名称被破坏了!

请问我该如何防止这种情况?

通常的解决方案是将函数声明extern "C" 。 这不仅会导致名称像在 C 中一样被破坏,而且还会导致函数使用 C 调用约定。