4

我正在使用 Windows 下的 Netbeans 和 MinGW 开发一个共享的 C++ DLL。

我的第一个问题是:MinGW 和 Microsoft Visual C++ 之间的修改会有所不同吗?我读到 mangling 是特定于编译器的 - 是真的吗?我需要使用 MinGW 获得与 MVC++ 相同的修饰,这可能吗?

我发现,使用 Dependency Walker,导出的函数也被视为 C(在我的代码中它们没有导出为 C)。这是否取决于 DepWalker 的限制或出于某种原因 MinGW 正在使我的库导出为 C?(我验证了使用“export C”我不再看到修改,而没有,我看到名称修改(这与我基于 MVC++ 所期望的不同)但我仍然看到“C”图标而不是“C++ ”。

这是链接命令:

g++.exe -static-libgcc -static-libstdc++ -shared -o my.dll -s 1.o 2.o ... n.o other.dll -static

提前致谢并致以最诚挚的问候。

4

1 回答 1

6

是的,名称修饰是特定于编译器的。它甚至可以在同一编译器的版本之间发生变化。

你永远不应该期望任何关于修改的事情,应该把它当作一个黑匣子——永远不要依赖它是相同的还是不同的。

如果您需要跨编译器链接,请使用extern "C".

于 2011-02-21T09:31:37.523 回答