大家好,
我在我的项目中使用MinGW、QT和CMake。

如图所示,我的项目有两个模块。
"libRinzoCore“主要使用QT对象进行开发,并针对QT库进行链接。
"Rinzo.exe“也使用QT库对象,有些不在"libRinzoCore".So中使用--我不得不将QT和"libRinzoCore”与此可执行文件链接起来。
我可以毫无问题地编译"libRinzoCore“,它生成了两个文件"libRinzoCore.DLL”和"libRinzoCore.DLL.a“。
但是,在编译"Rinzo.exe“时,它提供了以下输出:
Linking CXX executable Rinzo.exe
Info: resolving IRzPlugin::staticMetaObject by linking to __imp___ZN9IRzPlugin16staticMetaObjectE (auto-import)
Info: resolving IRzViewerPlugin::staticMetaObject by linking to __imp___ZN15IRzViewerPlugin16staticMetaObjectE (auto-import)
Info: resolving IRzLayeringPlugin::staticMetaObject by linking to __imp___ZN17IRzLayeringPlugin16staticMetaObjectE (auto-import)
C:\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe: warning: auto-importing has been activated without --enable-auto-import specified on the command line.
This should work unless it involves constant data structures referencing symbols
from auto-imported DLLs.
[100%] Built target Rinzo当执行"Rinzo.exe“时,它会与消息一起崩溃(这是来自日语错误消息的翻译)
“应用程序无法正确穿孔(0xc0000005)。单击”确定“可取消”
这是我的CMake文件
libRinzoCore:
http://www.keepandshare.com/doc/2199086/rinzocore-txt-august-31-2010-12-10-pm-2k?da=y
Rinzo.exe:
http://www.keepandshare.com/doc/2199085/rinzo-txt-august-31-2010-12-10-pm-5k?da=y
如果我将"libRinzoCore“编译成一个静态库,它就能正常工作。并且在Linux上工作得很好。
有小费吗?
发布于 2010-08-31 07:19:55
在windows上,您需要声明动态库的“导出”部分,以使其工作。
#ifdef Q_WS_WIN
#ifdef RINZO_EXPORT
#define RINZO_LIB __declspec(dllexport)
#else
#define RINZO_LIB __declspec(dllimport)
#endif
#else
#define RINZO_LIB
#endif然后,您需要将RINZO_LIB放在lib内部类声明的前面(只有要“导出”的类,在外部代码中使用)
class RINZO_LIB YourExportedClass
{
...
}最后一部分是在编译库时添加预处理宏。如你所见,它是RINZO_EXPORT
记住,在“导入”(使用库外的代码)时,不要添加这个预处理器宏。
此外,所有函数都要求RINZO_LIB宏在库外可见:
RINZO_LIB void yourExportedFunction()
{
...
}https://stackoverflow.com/questions/3606043
复制相似问题