在 Qt 中包含一个库,为什么这不起作用?
这看起来应该很简单。 我在 Qt 中编译了一个库(这个 newmat 库),并生成了文件 libnewmat.a。 现在我需要将该库集成到另一个项目中,但我无法让它工作。
我在 .pro 文件中使用 LIBS 变量尝试了一些不同的操作,包括:
Win32:LIBS += libnewmat.a #library is in same directory as the project
Win32:LIBS += "C:/...path.../libnewmat.a"
Win32:LIBS += L"C:/...path..." -lnewmat
我什至尝试在路径中使用正斜杠和反斜杠,但没有什么区别。 我还包括此检查以确保实际找到该库:
!exists(libnewmat.a) {
error("libnewmat.a does not exist")
}
所以我知道这不是问题。 我不明白的是,当我 ctrl+f 编译器输出(显示 qmake 在命令行中使用的命令)时,我没有找到任何对该库的引用。 由于某种原因,我的 LIBS 变量在命令行上没有任何区别,而这正是我所期望的。 这是编译器输出的示例,如果有人想仔细检查,我希望引用该库:
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\Qt\2009.02\qt\include\QtCore" -I"..\..\..\..\Qt\2009.02\qt\include\QtGui" -I"..\..\..\..\Qt\2009.02\qt\include\QtOpenGL" -I"..\..\..\..\Qt\2009.02\qt\include" -I"..\Visual Studio Projects\NewMatProj\newmat10" -I"..\..\..\..\Qt\2009.02\qt\include\ActiveQt" -I"debug" -I"." -I"..\..\..\..\Qt\2009.02\qt\mkspecs\win32-g++" -o debug\moc_Window.o debug\moc_Window.cpp
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\GLPractice.exe debug/main.o debug/GLWidget.o debug/Window.o debug/CGSWidget.o debug/moc_GLWidget.o debug/moc_Window.o -L"c:\Qt\2009.02\qt\lib" -lopengl32 -lglu32 -lgdi32 -luser32 -lmingw32 -lqtmaind -lQtOpenGLd4 -lQtGuid4 -lQtCored4
我怀疑这里缺少一些非常简单的东西。
我在 Windows Vista 上使用 QtCreator。
This seems like it should be really simple. I compiled a library in Qt (this newmat library), and produced the file libnewmat.a. Now I need to integrate this library into another project but I just can't get it to work.
I've tried a few different things with the LIBS variable in my .pro file including:
Win32:LIBS += libnewmat.a #library is in same directory as the project
Win32:LIBS += "C:/...path.../libnewmat.a"
Win32:LIBS += L"C:/...path..." -lnewmat
I've even tried using forward and back slashes in the path but it made no difference. I also include this check to make sure the library is actually found:
!exists(libnewmat.a) {
error("libnewmat.a does not exist")
}
So I know that isn't the problem. What I don't understand is that when i ctrl+f the compiler output (which displays the commands that qmake is using at the command line), I don't find any reference to the library. For some reason my LIBS variable isn't making any difference on the command line which is where I would expect it to be. Here is a sample of the compiler output where I would expect the library to be referenced if anyone would like to double check:
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\Qt\2009.02\qt\include\QtCore" -I"..\..\..\..\Qt\2009.02\qt\include\QtGui" -I"..\..\..\..\Qt\2009.02\qt\include\QtOpenGL" -I"..\..\..\..\Qt\2009.02\qt\include" -I"..\Visual Studio Projects\NewMatProj\newmat10" -I"..\..\..\..\Qt\2009.02\qt\include\ActiveQt" -I"debug" -I"." -I"..\..\..\..\Qt\2009.02\qt\mkspecs\win32-g++" -o debug\moc_Window.o debug\moc_Window.cpp
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\GLPractice.exe debug/main.o debug/GLWidget.o debug/Window.o debug/CGSWidget.o debug/moc_GLWidget.o debug/moc_Window.o -L"c:\Qt\2009.02\qt\lib" -lopengl32 -lglu32 -lgdi32 -luser32 -lmingw32 -lqtmaind -lQtOpenGLd4 -lQtGuid4 -lQtCored4
I suspect there is something really simple that I'm missing here.
I'm using QtCreator on Windows Vista.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
pro 文件中不需要很多库。 试试这个,它对我有用。
Win32:INCLUDEPATH += .
Win32:LIBS += "C:/...path.../libnewmat.a"
或
Win32:DEPENDPATH += 。
Win32:LIBS += "C:/...path.../libnewmat.a"
另外 libnewmat.a 可能是 linux 库..通常 Windows 库具有 .lib 扩展名..但不确定..
-Arps
u dont need a lot of libs in pro file. try this, it worked for me.
Win32:INCLUDEPATH += .
Win32:LIBS += "C:/...path.../libnewmat.a"
or
Win32:DEPENDPATH += .
Win32:LIBS += "C:/...path.../libnewmat.a"
Also libnewmat.a might be linux library.. normally windows libs have .lib extension.. not sure though..
-Arps
我也有同样的问题。 不是可以从静态库链接到静态库吗? 无论如何,如果您通过从 .pro 文件中删除
CONFIG+=static
来创建共享库,则可以避免此问题。干杯,
H
I've the very same problem. Isn't it possible to link to a static library from a static library? Anyhow if you make a shared library by removing
CONFIG+=static
from .pro file you avoid this problem.Cheers,
H
我认为范围条件区分大小写:
I think the scope conditions are case sensitive: