我正在Windows下使用Netbeans和MinGW处理共享C ++ DLL。
我的第一个问题是:MinGW和Microsoft Visual C ++之间会不一致? 我读到mangling是编译器特定的 - 是真的吗?我需要使用MinGW获得与MVC ++相同的修改,这有可能吗?
我发现,使用Dependency Walker,导出的函数也被视为C(在我的代码中它们不会导出为C)。这是否取决于DepWalker的限制或由于某种原因MinGW使我的库导出为C? (我确认使用“导出C”我不再看到错误了,而没有,我看到名称错误(这与我期望的基于MVC ++的不同)但我仍然看到“C”图标而不是“C ++” ”
这是链接命令:
g++.exe -static-libgcc -static-libstdc++ -shared -o my.dll -s 1.o 2.o ... n.o other.dll -static
提前感谢和最诚挚的问候。
答案 0 :(得分:6)
是的,名称修改是特定于编译器的。它甚至可以在同一编译器的版本之间进行更改。
你永远不应该期待任何关于破损的事情,并且应该将它视为一个黑盒子 - 永远不要依赖它是相同或不同的。
如果需要编译器间链接,请使用extern "C"
。