Qt5.5静态构建在ubuntu14上找不到-IGL

时间:2015-12-02 15:43:06

标签: c++ linux qt opengl static

我已经为静态构建编译了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。

2 个答案:

答案 0 :(得分:3)

您的实际问题是什么:

您有未满足的依赖项。 你以为你已经安装了所有必需的依赖项 sudo apt-get install libglu1-mesa-dev


sudo apt-get install libgl1-mesa-dev

问题是您的i386系统是x32系统。
但是您已使用上面的命令

为x64系统安装了开发文件

以下是 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>的目录列表中。