【发布时间】:2012-05-25 15:42:40
【问题描述】:
在 windows 下,我们有一个 C 接口 (extern "C" { // interface }) 到我们的 C++ 库,它使用模块定义文件 (.def) 导出未修改的函数。
我正在尝试在 linux 下重新创建相同的东西,我相对缺乏经验。据我了解,在 NIX 系统下,所有功能都是默认导出的。考虑到这一点,我创建了一个共享对象,并通过 nm 命令运行。
我很惊讶地发现,与 Windows 不同的是,我的函数名称被破坏了!
请问如何防止这种情况发生?
【问题讨论】:
-
@pmg - 抱歉,我已经修改了问题。
-
您确定不只是想编译一个共享库,然后将您的主程序链接到它吗?您在 windows 中通过 .def 文件执行的基本功能在此处自动完成。
-
gcc -x c 可能吗?来自 [这里][1] 上的答案 :) [1]:stackoverflow.com/questions/4216247/…
-
你的问题对我来说毫无意义。例如,如果您将函数
myfunc(double)声明为extern "C"实现该函数的代码已看到该定义,那么它将不会在目标文件。 -
我认为我们需要一个小而完整的
extern "C" { //interface }示例。你不应该有这个问题。
标签: c++ c linux shared-objects name-mangling