[英]Qt library link errors in Windows
项目在Linux上构建良好,但是在Windows中链接存在问题。
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
部署到$${IDE_BUILD_TREE}/lib/qtcreator/plugins
。 使用Qt 5.10.1和MSVC 2015构建。
这是什么问题/技巧? 怎么解决?
在库.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>();
namespace MyLibrary {
Q_NAMESPACE
enum class MYLIBRARYSHARED_EXPORT MyEnumClass {
...
};
Q_ENUM_NS(MyEnumClass)
...
} // namespace MyLibrary
以及如何解决第三个问题?
我的坏处:由某些类的声明中缺少MYLIBRARYSHARED_EXPORT
引起的错误,在全局标头中将其定义为:
#if defined(MYLIBRARY_LIBRARY)
# define MYLIBRARYSHARED_EXPORT Q_DECL_EXPORT
#else
# define MYLIBRARYSHARED_EXPORT Q_DECL_IMPORT
#endif
没有MYLIBRARYSHARED_EXPORT
可以在Linux和Mac上MYLIBRARYSHARED_EXPORT
构建,但是在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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.