项目在Linux上构建良好,但在Windows中存在链接问题。
Program.ob.b = 4;
LNK2019: unresolved external symbol ...
LNK1120: 21 unresolved externals
文件包含:
.pro
注意。
isEmpty(IDE_BUILD_TREE): IDE_BUILD_TREE = ../../qt-creator-debug LIBS += -L$${IDE_BUILD_TREE}/lib/qtcreator/plugins -lMyLibrary
在构建之前部署到MyLibrary
。使用Qt 5.10.1和MSVC 2015构建。
这里有什么问题/诀窍?怎么解决?
在库中$${IDE_BUILD_TREE}/lib/qtcreator/plugins
文件.pro
定义了变量,结果库的名称为VERSION
。此后我收到错误:
MyLibrary1.lib
此处有什么更好的解决方法:删除:-1: error: LNK1181: cannot open input file 'MyLibrary.lib'
或修复VERSION
文件?怎么样?
另一个链接错误:
.pro
由于代码中的以下行而发生错误(注释时消失):
mydialog.obj:-1: error: LNK2001: unresolved external symbol
"struct QMetaObject const MyLibrary::staticMetaObject"
(?staticMetaObject@MyLibrary@@3UQMetaObject@@B)
QMetaEnum myEnum = QMetaEnum::fromType<MyLibrary::MyEnumClass>();
如何解决第三个问题?
答案 0 :(得分:2)
我的错误:在某些类的声明中错过MYLIBRARYSHARED_EXPORT
导致的错误,在全局标题中定义为:
#if defined(MYLIBRARY_LIBRARY)
# define MYLIBRARYSHARED_EXPORT Q_DECL_EXPORT
#else
# define MYLIBRARYSHARED_EXPORT Q_DECL_IMPORT
#endif
没有MYLIBRARYSHARED_EXPORT
在Linux和Mac中构建良好但在Windows中失败。
可能的解决方案 - 添加到.pro
文件行:
win32:CONFIG += skip_target_version_ext
或
win32:TARGET_EXT = .dll
在Windows上设置没有主版本号的输出文件名。但是我看到,例如,Qt Creator插件链接库的主要版本号没有问题。怎么做?
还需要在Q_NAMESPACE
之前添加MYLIBRARYSHARED_EXPORT
声明:
namespace MyLibrary {
MYLIBRARYSHARED_EXPORT Q_NAMESPACE
enum class MYLIBRARYSHARED_EXPORT MyEnumClass {
...
};
Q_ENUM_NS(MyEnumClass)
...
} // namespace MyLibrary