在 Qt 中包含一个库,为什么这不起作用?

发布于 2024-07-30 07:26:03 字数 1705 浏览 4 评论 0原文

这看起来应该很简单。 我在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

書生途 2024-08-06 07:26:03

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

街角迷惘 2024-08-06 07:26:03

我也有同样的问题。 不是可以从静态库链接到静态库吗? 无论如何,如果您通过从 .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

等风来 2024-08-06 07:26:03

我认为范围条件区分大小写:

win32:LIBS += libnewmat.a  # lowercase w

I think the scope conditions are case sensitive:

win32:LIBS += libnewmat.a  # lowercase w
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文