qt为第三方标头和库添加路径
我正在使用qt并开发一个桌面应用程序,该应用程序将在win xp/vista下运行 我有一个第三方库UserAgentLib(静态和共享)。但我不知道如何在qt creator中链接 我已打开*.pro文件并添加了我的库和头路径。 库名为UserAgentLib,头文件名为UserAgentLib.hqt为第三方标头和库添加路径,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 +=
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,但您应该使用完整的