使用MinGW创建没有名称的C ++库

时间:2017-01-20 12:12:02

标签: c++ c dll g++ mingw

我有几个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"
  • 库不是那么简单的包装器。实际上它创建了几个C ++对象 使用C应用程序的句柄操作。它也抓住了 来自C ++类等的异常。

Klasyc

0 个答案:

没有答案