QtCreator LNK2019 外部库错误
QtCreator LNK2019 error with external library
当我想 link 我的 Qt 项目的库时遇到问题。
当我尝试在 Qt Creator 中包含外部库 (libnodave.lib) 并尝试构建它时,出现以下错误。
main.obj:-1: Fehler: LNK2019: unresolved external symbol __imp_daveSetDebug referenced in function main
我很确定我的项目和 .pro 文件中包含了所有需要的文件。我使用 "Add Library" 向导来添加库。
在 Qt Creator 没有成功之后,我用 Visual Studio 创建了一个最小的例子。当我将所有需要的文件包含到 VS 项目中时,我可以毫无错误地构建和 运行 它。所以我认为 Qt Creator linking 库一定有问题。我也尝试了Qt-Visual-Studio-Add-in,但是那里出现了同样的错误。
Here 是我想要包含的库的最小示例。
在Visual Studio示例中,我将库路径、包含路径和库名称添加到项目属性中。有效。
希望你能帮我解决我的问题。
编辑:
我想使用该库从 S7-300 SPS 设备获取一些数据。
以下代码是 Qt Creator 中的最小示例。
#include <QCoreApplication>
#include <QDebug>
#include <nodave.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
daveInterface *di;
daveSetDebug(daveDebugConnect); // Function of libnodave Library
qDebug() << "Hello World";
return a.exec();
}
这是 Visual Studio 最小示例的完整代码。
#include "stdafx.h"
#include <nodave.h>
int _tmain(int argc, _TCHAR* argv[])
{
daveInterface *di;
daveSetDebug(daveDebugConnect);
printf("Hello World\n");
return 0;
}
代码很少,我觉得里面没有错误。
这就是为什么我认为这一定是 Qt linker 或类似问题的原因。
编辑:
我的简历。
QT += core
QT -= gui
TARGET = qtminimal
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
win32: LIBS += -L$$PWD/../libnodave-0.8.5/win/ -llibnodave
INCLUDEPATH += $$PWD/../libnodave-0.8.5
DEPENDPATH += $$PWD/../libnodave-0.8.5
问题是 Qt 项目是 64 位的,而我要包含的库只有 32 位。
所以我下载了 32 位版本的 Qt,现在它可以工作了。
我发现了这个错误,当我试图用 libnodave 构建最小的例子时,没有任何 64 位 Qt 库。
通过在 VS2013 中创建一个新的 Qt 项目,使用 this 解决方法并在之后添加 libnodave 库,我可以更改它应该是 64 位还是 32 位构建。通过选择 32 位版本,Qt 库会产生错误,但 libnodave 库不会。当我选择 64 位构建时,只有 libnodave 会产生错误。
我希望它对其他人有用。
当我想 link 我的 Qt 项目的库时遇到问题。 当我尝试在 Qt Creator 中包含外部库 (libnodave.lib) 并尝试构建它时,出现以下错误。
main.obj:-1: Fehler: LNK2019: unresolved external symbol __imp_daveSetDebug referenced in function main
我很确定我的项目和 .pro 文件中包含了所有需要的文件。我使用 "Add Library" 向导来添加库。 在 Qt Creator 没有成功之后,我用 Visual Studio 创建了一个最小的例子。当我将所有需要的文件包含到 VS 项目中时,我可以毫无错误地构建和 运行 它。所以我认为 Qt Creator linking 库一定有问题。我也尝试了Qt-Visual-Studio-Add-in,但是那里出现了同样的错误。
Here 是我想要包含的库的最小示例。
在Visual Studio示例中,我将库路径、包含路径和库名称添加到项目属性中。有效。
希望你能帮我解决我的问题。
编辑:
我想使用该库从 S7-300 SPS 设备获取一些数据。
以下代码是 Qt Creator 中的最小示例。
#include <QCoreApplication>
#include <QDebug>
#include <nodave.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
daveInterface *di;
daveSetDebug(daveDebugConnect); // Function of libnodave Library
qDebug() << "Hello World";
return a.exec();
}
这是 Visual Studio 最小示例的完整代码。
#include "stdafx.h"
#include <nodave.h>
int _tmain(int argc, _TCHAR* argv[])
{
daveInterface *di;
daveSetDebug(daveDebugConnect);
printf("Hello World\n");
return 0;
}
代码很少,我觉得里面没有错误。 这就是为什么我认为这一定是 Qt linker 或类似问题的原因。
编辑:
我的简历。
QT += core
QT -= gui
TARGET = qtminimal
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
win32: LIBS += -L$$PWD/../libnodave-0.8.5/win/ -llibnodave
INCLUDEPATH += $$PWD/../libnodave-0.8.5
DEPENDPATH += $$PWD/../libnodave-0.8.5
问题是 Qt 项目是 64 位的,而我要包含的库只有 32 位。 所以我下载了 32 位版本的 Qt,现在它可以工作了。 我发现了这个错误,当我试图用 libnodave 构建最小的例子时,没有任何 64 位 Qt 库。
通过在 VS2013 中创建一个新的 Qt 项目,使用 this 解决方法并在之后添加 libnodave 库,我可以更改它应该是 64 位还是 32 位构建。通过选择 32 位版本,Qt 库会产生错误,但 libnodave 库不会。当我选择 64 位构建时,只有 libnodave 会产生错误。
我希望它对其他人有用。