我已经为静态构建编译了qt 5.5,它工作正常。
然而,当我在专业文件中添加小部件“QT + = widgets”时,我收到链接错误“找不到-IGL”
根据我的阅读,这与Open GL库有关。我尝试过以下方法:
sudo apt-get install libglu1-mesa-dev
和
sudo apt-get install libgl1-mesa-dev
但这里没有运气......我想知道我是否需要静态版本?或者可能缺少符号链接,但我无法弄清楚下一步:(
修改这是实际的错误消息:
g ++ -static -static-libgcc -static-libstdc ++ -Wl,-O1 -o ../targetRel/McpSupervisor main.o cconfig.o cconfigxml.o mcpprocessbase.o rpeprocess.o supervisor.o cipcomms.o mcpsupervisor_plugin_import。 o moc_mcpprocessbase.o moc_supervisor.o moc_cipcomms.o -L / usr / lib / i386-linux-gnu / mesa -L / usr / local / Qt-5.5.1 / lib -lQt5Xml -lQt5Widgets -L / usr / local / Qt -5.5.1 / plugins / bearer -lqconnmanbearer -lqgenericbearer -lqnmbearer -lQt5Network -L / usr / local / Qt-5.5.1 / plugins / platforms -lqxcb -L / usr / local / Qt-5.5.1 / plugins / xcbglintegrations -lqxcb-glx-integration -lxcb-glx -lQt5XcbQpa -lX11-xcb -lXi -lxcb-render-util -lxcb-render -lxcb -lxcb-image -lxcb-icccm -lxcb-sync -lxcb-xfixes -lxcb-shm -lxcb-randr -lxcb-shape -lxcb-keysyms -lxcb-xkb -lQt5PlatformSupport -lfontconfig -lfreetype -lQt5DBus -lXrender -lXext -lX11 -L / usr / local / Qt-5.5.1 / plugins / imageformats -lqdds -lqicns -lqico -lqjp2 -lqmng -lqtga -lqtiff -lqwbmp -lqwebp -lQt5Gui -lpng -lqtharfbuzzng -lQt5Core -lz -licui18n -licuuc -licudata -lqtpcre -lm -ldl -pthread -lgthread-2.0 -lglib-2.0 -lrt -lGL -lpthread /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/libX11.a(CrGlCur.o):在函数
open_library': (.text+0x33): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /usr/bin/ld: cannot find -lGL /usr/local/Qt-5.5.1/plugins/imageformats/libqjp2.a(jas_stream.o): In function
jas_stream_tmpfile'中: jas_stream.c :(。text + 0x7a4):警告:使用tmpnam' is dangerous, better use
mkstemp' /usr/local/Qt-5.5.1/lib/libQt5Core.a(qfilesystemengine_unix.o):在函数QFileSystemEngine::resolveGroupName(unsigned int)': qfilesystemengine_unix.cpp:(.text+0x943): warning: Using 'getgrgid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/libglib-2.0.a(libglib_2_0_la-gutils.o): In function
g_get_user_database_entry'中: (.text + 0x25a):警告:在静态链接的应用程序中使用'getpwuid'需要在运行时使用用于链接的glibc版本的共享库 /usr/lib/gcc/i686-linux-gnu/4.8/../../../i386-linux-gnu/libglib-2.0.a(libglib_2_0_la-gutils.o):在函数g_get_user_database_entry': (.text+0xa3): warning: Using 'getpwnam_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /usr/local/Qt-5.5.1/lib/libQt5Core.a(qfilesystemengine_unix.o): In function
中QFileSystemEngine :: resolveUserName(unsigned int)': qfilesystemengine_unix.cpp :(。text + 0x592):警告:在静态链接的应用程序中使用'getpwuid_r'需要在运行时使用用于链接的glibc版本的共享库 /usr/local/Qt-5.5.1/lib/libQt5Network.a(qhostinfo_unix.o):在函数`QHostInfoAgent :: fromName(QString const&)'中: qhostinfo_unix.cpp :(。text + 0x580):警告:在静态链接的应用程序中使用'getaddrinfo'需要在运行时使用用于链接的glibc版本的共享库 collect2:错误:ld返回1退出状态 make:*** [../targetRel/McpSupervisor]错误1 09:49:17:进程“/ usr / bin / make”退出代码2。 构建/部署项目qtMain时出错(套件:Qt 5.5.1 GCC 32位静态) 执行步骤“Make”时 09:49:17:经过的时间:00:08。
答案 0 :(得分:3)
您的实际问题是什么:
您有未满足的依赖项。
你以为你已经安装了所有必需的依赖项
sudo apt-get install libglu1-mesa-dev
sudo apt-get install libgl1-mesa-dev
问题是您的i386系统是x32系统。
但是您已使用上面的命令
以下是 ANSWER:
Intsall以下内容
sudo apt-get install libgl1-mesa-dev:i386
sudo apt-get install libglu1-mesa-dev:i386
现在它应该工作;)
针对此特定问题的访问者的其他一些有用的东西
以下几行是我尝试解决问题的方法,但由于提出问题的人有x32系统但下面的评论适用于x64系统,因此无效。但是,下面的元答案从来都不会适用于具有相同问题的人和x64系统。而且,在发生类似问题后,了解有什么基本步骤可以帮助解决问题
@ code_fodder我想通过在你的问题下面发表评论来提问,但我没有50个声誉。
所以我必须使用答案提交表格。 :(
你有Miscellaneous Mesa GL公用事业吗?
如果您没有它们,请使用
进行安装sudo apt-get install mesa-utils
如果你想使用OpenGl ES,你必须使用
安装Miscellaneous Mesa utilies(opengles,egl)sudo apt-get install mesa-utils-extra
如果有效,请告诉我。
于2015年12月17日发布新信息
我将在这里发布我的project.pro文件的一部分。它特别包含我用于简单OpenGL项目的库链接方法。
我正在使用GLEW和OpenGL以及SDL2
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += main.cpp \
mesh.cpp \
display.cpp \
shader.cpp
HEADERS += \
mesh.h \
display.h\
shader.h
unix|win32: LIBS += -lGL \
-lGLEW \
/usr/local/lib/libSDL2-2.0.so
您可以注意到我正在使用静态和动态链接库。
您可能需要添加: {。1}}到您的.pro文件。但是,对于32位系统,路径可能不同。在该文件夹中有所需的mesa库文件。这些是我系统的文件。
unix | win32: LIBS += -L/usr/lib/x86_64-linux-gnu/mesa/
立即尝试编译,看看是否有效
如果没有那么你要么有未满足的依赖关系,要么你正在使用旧的OpenGL。
现在,在运行 zehel@zehel-PC:/usr/lib/x86_64-linux-gnu/mesa$ ls
ld.so.conf libGL.so libGL.so.1 libGL.so.1.2.0
之后,您将能够使用名为 sudo apt-get install mesa-utils
的命令。它将显示有关您的图形卡的所有必需信息。
运行 glxinfo
它会告诉你你有什么版本的OpenGl和mesa
我的是这样的
glxinfo | grep "OpenGl version string"
如果它们小于3.0,那么您不使用现代OpenGL,并且可能需要更新图形驱动程序。
但如果他们是3.0或以上那么你可能没事。
我无法重现您的问题所以我认为您缺少依赖
请参阅QT论坛上的这篇文章,其中遇到相同问题的人说安装依赖项后问题已解决
http://forum.qt.io/topic/36282/solved-qt-5-2-0-and-lgl-issue
qt论坛的最后一个答案非常好,请参考。
更新我是否有效。
希望这有帮助。
答案 1 :(得分:0)
您可能需要指定可以找到GL库的路径,例如,使用GCC的-L选项,其中包含以下手册页描述:
<强> -L 强> DIR 将目录 dir 添加到要搜索 -l </ strong>的目录列表中。