我有几个C ++类,我决定编译成其他应用程序可用的独立库。因此,我创建了一个简单的C兼容信封,它包装了C ++类。头文件中的函数定义放在extern "C"
块中。
当我使用MinGW g ++编译它时,我得到带有修饰函数名的共享库。每个函数名称都有后缀@ars_size
。为了摆脱这些名称,我将-Wl,--kill-at
参数传递给g ++。然后我终于得到了未修饰的名字。
然后我做了一个简单的C ++ / Qt应用程序,作为新库的测试人员。不幸的是,当我将库的头文件包含到我的C ++应用程序中时,我得到链接错误:
release/mainwindow.o:mainwindow.cpp:(.text+0xd6f): undefined reference to `_imp__TdbGetLastErr@12'
release/mainwindow.o:mainwindow.cpp:(.text+0x1163): undefined reference to `_imp__TdbGetAsyncErr@12'
release/mainwindow.o:mainwindow.cpp:(.text+0x166f): undefined reference to `_imp__TdbStop@4'
release/mainwindow.o:mainwindow.cpp:(.text+0x1698): undefined reference to `_imp__TdbForceTrigger@0'
...
要摆脱这些错误,我必须在编译库时排除-Wl,--kill-at
。但是该库与C应用程序不兼容。我认为关键是让MinGW g ++链接未修饰的函数。请有人知道,怎么做?
编辑:在评论中添加更多详细信息。
extern "C"
)
源代码,因此编译器应该知道extern "C"
。Klasyc