qt为第三方标头和库添加路径

qt为第三方标头和库添加路径,qt,path,include,Qt,Path,Include,我正在使用qt并开发一个桌面应用程序,该应用程序将在win xp/vista下运行 我有一个第三方库UserAgentLib(静态和共享)。但我不知道如何在qt creator中链接 我已打开*.pro文件并添加了我的库和头路径。 库名为UserAgentLib,头文件名为UserAgentLib.h TARGET = Dialer TEMPLATE = app LIBS += D:\Projects\qtDialer\tools\lib\UserAgentLib INCLUDEPATH +=

我正在使用qt并开发一个桌面应用程序,该应用程序将在win xp/vista下运行

我有一个第三方库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.cpp
#include "mathslibrary.hpp"
int add_numbers(const int a, const int b)
{
return a + b;
}
我已经把它编入了图书馆。并通过在VS2008中链接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();
}
以下是我尝试构建时遇到的错误:

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

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

以下是编译问题:

正在运行项目testlibrary的生成步骤

正在创建gdb宏库

配置未更改,跳过QMake步骤

启动:C:/Qt/mingw/bin/mingw32-make.exe调试-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生成[1]:*[debug\testlibrary.exe]错误1 mingw32 make:[debug]错误2 已退出,代码为2。 生成项目测试库时出错 执行生成步骤“Make”时


非常感谢您的建议,

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

!exists( UserAgentLib.h ) {
 error( "No UserAgentLib.h file found" )
}
您将上述内容放入
.pro
文件之一,而不是构造函数中。请参阅


如果库没有被链接(这是在你的应用程序已经编译好之后)——那么你需要修改你的
LIBS+=…
行,尽管乍一看这行看起来不错。

如果你遇到编译器错误,那么你的
UserAgentLib.h
可能没有被包括在内。您可以使用以下工具进行测试:

!exists( UserAgentLib.h ) {
 error( "No UserAgentLib.h file found" )
}
您将上述内容放入
.pro
文件之一,而不是构造函数中。请参阅


如果库没有被链接(这是在你的应用程序编译好之后)——那么你需要修改你的
LIBS+=…
行,尽管乍一看它看起来很好。

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

 LIBS += D:\Projects\qtDialer\tools\lib\mathsLibrary.lib
在.hpp文件中,在函数声明之前添加外部“C”:

// mathslibrary.hpp
extern "C" int add_numbers(const int a, const int b);
从Visual Studio重建库


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

首先用简单库尝试此操作,然后用实际要使用的库尝试此操作

 LIBS += D:\Projects\qtDialer\tools\lib\mathsLibrary.lib
在.hpp文件中,在函数声明之前添加外部“C”:

// mathslibrary.hpp
extern "C" int add_numbers(const int a, const int b);
从Visual Studio重建库


现在,您应该能够使用Qt Creater编译测试应用程序。然后将相应的dll与新的可执行文件一起复制到目录中,并运行它。

不知道这是否会改变任何内容,但您可能必须这样定义它:

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

不知道这是否会改变什么,但也许你必须这样定义它:

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

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

使用不同编译器创建的对象文件和静态库,或 即使是同一个编译器的不同版本,通常 无法链接在一起。这个问题并不是MinGW所特有的:很多 其他编译器互不兼容。建造一切从 如果可以,请使用同一编译器的同一版本的源代码


勾选这个:

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

使用不同编译器创建的对象文件和静态库,或 即使是同一个编译器的不同版本,通常 无法链接在一起。这个问题并不是MinGW所特有的:很多 其他编译器互不兼容。建造一切从 如果可以,请使用同一编译器的同一版本的源代码


勾选此项:

您好,我已将代码输入到构造函数中。但是,由于编译错误,程序无法运行。也许是我的图书馆。该库是用VS2005编译的。您好,我已将代码输入到构造函数中。但是,由于编译错误,程序无法运行。也许是我的图书馆。库是用VS2005编译的。您好,我通过添加扩展名尝试了dll和lib。LIBS+=D:\Projects\qtDialer\tools\lib\UserAgentLib.lib LIBS+=D:\Projects\qtDialer\tools\lib\UserAgentLib.dll该库是使用WIN32 visual studio 2005编译的。那会有什么不同吗?感谢您的建议我不使用visual studio,但您应该使用完整的