qt 添加第 3 方头文件和库的路径

Posted

技术标签:

【中文标题】qt 添加第 3 方头文件和库的路径【英文标题】:qt add path for 3rd party header and libraries 【发布时间】:2009-03-15 12:02:01 【问题描述】:

我正在使用 qt 并开发将在 win xp/vista 下运行的桌面应用程序。

我有一个第 3 方库 UserAgentLib(静态和共享)。但我不确定如何在 qt creator 中链接。

我打开了 *.pro 文件并添加了我的库和头文件路径。 该库称为 UserAgentLib,头文件称为 UserAgentLib.h

TARGET = Dialer
TEMPLATE = app

LIBS += D:\Projects\qtDialer\tools\lib\UserAgentLib
INCLUDEPATH += D:\Projects\qtDialer\tools\inc

SOURCES += main.cpp\
        catdialer.cpp

HEADERS  += catdialer.h

FORMS    += catdialer.ui

我认为它确实找到了头文件,因为我在 UserAgentLib.h 文件中收到大约 100 个声明错误。但是,我不认为它与图书馆链接。

非常感谢您的任何建议,

=======================

我在 VS C++ 2008 中创建了一个非常简单的库。这是头文件和源文件的代码。 标题:

// mathslibrary.hpp
int add_numbers(const int a, const int b);

来源:

// mathslibrary.cpp
#include "mathslibrary.hpp"
int add_numbers(const int a, const int b)

return a + b;

我已经把它编译成一个库。并通过与 VS 2008 中的 WIN32 控制台应用程序链接进行测试。该库按预期工作。

现在当我尝试与 qt 链接时。

#include <QtCore/QCoreApplication>
#include <iostream>
#include "mathslibrary.hpp"
int main(int argc, char *argv[])

    QCoreApplication a(argc, argv);
    std::cout << "add numbers 40 + 60 = " << add_numbers(40, 60) << std::endl;
    return a.exec();

这是我的 qmake 文件:

QT       -= gui
TARGET = testlibrary
CONFIG   += console
CONFIG   -= app_bundle
TEMPLATE = app
LIBS = D:\Projects\TestLibrary\mathsLibrary\Debug\mathsLibrary.lib
INCLUDEPATH = D:\Projects\TestLibrary\mathsLibrary\
SOURCES += main.cpp

这些是我在尝试构建时遇到的错误:

c:/Qt/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../libmingw32.a(main.o):main.c::-1 : 错误:未定义对 `WinMain@16' 的引用

:-1: 错误:collect2: ld 返回 1 个退出状态

这些是编译问题:

正在运行项目测试库的构建步骤...

正在创建 gdb 宏库...

配置不变,跳过 QMake 步骤。

开始:C:/Qt/mingw/bin/mingw32-make.exe debug -w

mingw32-make: 进入目录`D:/Projects/TestQTLibrary/testlibrary'

C:/Qt/mingw/bin/mingw32-make -f Makefile.Debug mingw32-make[1]: 进入目录`D:/Projects/TestQTLibrary/testlibrary'

g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-subsystem,console -mthreads -Wl -o debug\testlibrary.exe -L "c:\Qt\qt\lib"

D:\Projects\TestLibrary\mathsLibrary\Debug\mathsLibrary.lib -lQtCored4 mingw32-make[1]: 离开目录`D:/Projects/TestQTLibrary/testlibrary'

mingw32-make: 离开目录 `D:/Projects/TestQTLibrary/testlibrary'

c:/Qt/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../libmingw32.a(main.o):main.c:

(.text+0x104): 未定义对 `WinMain@16' 的引用 collect2: ld 返回 1 个退出状态 mingw32-make[1]: * [debug\testlibrary.exe] 错误 1 mingw32-make: * [调试] 错误 2 以代码 2 退出。 构建项目测试库时出错 执行构建步骤“Make”时

非常感谢您的建议,

【问题讨论】:

【参考方案1】:

不知道这是否会改变任何东西,但也许你必须像这样定义它:

LIBS += -LD:/Projects/qtDialer/tools/lib -lUserAgentLib

【讨论】:

【参考方案2】:

如果您遇到编译器错误,那么您的UserAgentLib.h 可能没有被包含在内。您可以使用以下方法对其进行测试:

!exists( UserAgentLib.h ) 
 error( "No UserAgentLib.h file found" )

您将上述内容放在.pro 文件之一而不是构造函数中。请参阅this。

如果库没有被链接(这是在你的应用程序编译好之后)——那么你需要修改你的 LIBS += ... 行,虽然乍一看似乎很好。

【讨论】:

您好,我已经在构造函数中输入了代码。但是,由于编译错误,该程序将无法运行。也许它是我的图书馆。该库是用 VS 2005 编译的。【参考方案3】:

先用简单的库试试这个,然后再用你实际尝试使用的库试试。

 LIBS += D:\Projects\qtDialer\tools\lib\mathsLibrary.lib

在您的 .hpp 文件中,在函数声明前添加 extern "C":

// mathslibrary.hpp
extern "C" int add_numbers(const int a, const int b);

从 Visual Studio 重建库。

现在您应该可以使用 Qt Creater 编译您的测试应用程序了。然后将相应的 dll 复制到包含新可执行文件的目录中并运行它。

【讨论】:

您好,我已经通过添加扩展名尝试了 dll 和 lib。 LIBS += D:\Projects\qtDialer\tools\lib\UserAgentLib.lib LIBS += D:\Projects\qtDialer\tools\lib\UserAgentLib.dll 该库是用 WIN32 Visual Studio 2005 编译的。这有什么不同吗?感谢您的任何建议 我不使用 Visual Studio,但您应该使用 Visual Studio 生成的库文件的全名。我只是建议将这些扩展作为可能性。 您可以尝试的另一件事.. qmake 真的更喜欢正斜杠。如果您必须使用反斜杠,请将它们加倍,例如 '\\'。 你好。我想我知道问题可能是什么。我已经使用我用本机 Visual C++ 2008 编写的库进行了测试。并将它与同样在 Visual C++ 2008 中创建的控制台应用程序链接。但是,该库不适用于 qt。我想我需要在 Visual Studio 编译器中编译 qt 应用程序。 我想我正在用 g++ MinGW/QT 编译我的 qt 应用程序。但是,我不确定如何更改为 VC++,因为我的库是在其中编译的。我去过'qt command prompt' 我可以在第一行看到。 '设置一个仅 MinGW/Qt 的环境......' 如何更改我的编译器?非常感谢,【参考方案4】:

据我了解,您使用 MSVC 生成了一个 dll,现在您正尝试使用 mingw 在 Qt 中链接它。对吧?

使用不同编译器创建的目标文件和静态库,或 即使同一编译器的版本明显不同,通常 不能连在一起。这个问题不是 MinGW 特有的:很多 其他编译器相互不兼容。建立一切 如果可以的话,使用相同版本的相同编译器的源代码

检查一下:http://chadaustin.me/cppinterface.html

【讨论】:

以上是关于qt 添加第 3 方头文件和库的路径的主要内容,如果未能解决你的问题,请参考以下文章

QT工程添加头文件路径

编译链接实战添加头文件路径和库路径

在不使用 matlab 头文件和库的情况下编写 MAT 文件

QT添加windows静态库

qt 5添加 windows 静态库

qt .pro文件和cmakelists.txt配置第三方库