Windows中的Qt库链接错误

时间:2018-04-27 14:33:51

标签: c++ windows qt linker-errors qmake

项目在Linux上构建良好,但在Windows中存在链接问题。

第1期:

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文件?怎么样?

第3期:

另一个链接错误:

.pro

由于代码中的以下行而发生错误(注释时消失):

mydialog.cpp:

mydialog.obj:-1: error: LNK2001: unresolved external symbol 
"struct QMetaObject const MyLibrary::staticMetaObject" 
(?staticMetaObject@MyLibrary@@3UQMetaObject@@B)

mylibrary.h:

    QMetaEnum myEnum = QMetaEnum::fromType<MyLibrary::MyEnumClass>();

如何解决第三个问题?

1 个答案:

答案 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插件链接库的主要版本号没有问题。怎么做?

第3期修复:

还需要在Q_NAMESPACE之前添加MYLIBRARYSHARED_EXPORT声明:

namespace MyLibrary {

MYLIBRARYSHARED_EXPORT Q_NAMESPACE

enum class MYLIBRARYSHARED_EXPORT MyEnumClass {
...
};

Q_ENUM_NS(MyEnumClass)
...
} // namespace MyLibrary