【问题标题】:Error Loading Shared Library (glew)加载共享库时出错(glew)
【发布时间】:2014-12-09 22:17:19
【问题描述】:

我编译了 GLEW 库。它似乎工作正常,这是 make install 的输出:

install -d -m 0755 "/usr/include/GL"
install -m 0644 include/GL/wglew.h "/usr/include/GL/"
install -m 0644 include/GL/glew.h "/usr/include/GL/"
install -m 0644 include/GL/glxew.h "/usr/include/GL/"
sed \
        -e "s|@prefix@|/usr|g" \
        -e "s|@libdir@|/usr/lib64|g" \
        -e "s|@exec_prefix@|/usr/bin|g" \
        -e "s|@includedir@|/usr/include/GL|g" \
        -e "s|@version@|1.11.0|g" \
        -e "s|@cflags@||g" \
        -e "s|@libname@|GLEW|g" \
        -e "s|@requireslib@|glu|g" \
        < glew.pc.in > glew.pc
install -d -m 0755 "/usr/lib64"
install -m 0644 lib/libGLEW.so.1.11.0 "/usr/lib64/"
ln -sf libGLEW.so.1.11.0 "/usr/lib64/libGLEW.so.1.11"
ln -sf libGLEW.so.1.11.0 "/usr/lib64/libGLEW.so"
install -m 0644 lib/libGLEW.a "/usr/lib64/"
install -d -m 0755 "/usr/lib64"
install -d -m 0755 "/usr/lib64/pkgconfig"
install -m 0644 glew.pc "/usr/lib64/pkgconfig/"

现在我想在 KDevelop 项目中使用它。我创建了我的 CMakeLists.txt 并使用 find_package 将库链接到那里:

cmake_minimum_required( VERSION 2.6 )

project(openglengine)

include_directories(headers)

set(SOURCE_FILES src/main.cpp)

set(CMAKE_CXX_FLAGS "--pedantic-errors -Wall -std=gnu++11")
add_executable(openglengine ${SOURCE_FILES} ${HEADER_FILES})

find_package(PkgConfig REQUIRED)
pkg_search_module(GLFW REQUIRED glfw3)
include_directories(${GLFW_INCLUDE_DIRS})
target_link_libraries(openglengine ${GLFW_STATIC_LIBRARIES})

find_package(GLEW)
if (GLEW_FOUND)
    include_directories(${GLEW_INCLUDE_DIRS})
    target_link_libraries (openglengine ${GLEW_LIBRARIES})
endif (GLEW_FOUND)

install(TARGETS openglengine RUNTIME DESTINATION ~/projects/OpenGLEngine/bin)

我没有收到任何构建错误。 当我尝试运行程序时,这里是输出:

error while loading shared libraries: libGLEW.so.1.11: cannot open shared object file: No such file or directory

任何帮助将不胜感激。

编辑:

使用命令 locate libGLEW 我得到这个输出:

/home/lhahn/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu/libGLEW.so.1.10
/home/lhahn/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu/libGLEW.so.1.10.0
/home/lhahn/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu/libGLEW.so.1.6
/home/lhahn/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu/libGLEW.so.1.6.0
/home/lhahn/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libGLEW.so.1.10
/home/lhahn/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libGLEW.so.1.10.0
/home/lhahn/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libGLEW.so.1.6
/home/lhahn/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu/libGLEW.so.1.6.0
/home/lhahn/.local/share/Trash/files/glew/lib/libGLEW.a
/home/lhahn/.local/share/Trash/files/glew/lib/libGLEW.so
/home/lhahn/.local/share/Trash/files/glew/lib/libGLEW.so.1.11
/home/lhahn/.local/share/Trash/files/glew/lib/libGLEW.so.1.11.0
/home/lhahn/.local/share/Trash/files/glew/lib/libGLEWmx.a
/home/lhahn/.local/share/Trash/files/glew/lib/libGLEWmx.so
/home/lhahn/.local/share/Trash/files/glew/lib/libGLEWmx.so.1.11
/home/lhahn/.local/share/Trash/files/glew/lib/libGLEWmx.so.1.11.0
/home/lhahn/Documents/OpenGL-Utils/GLEW/glew-1.11.0/lib/libGLEW.a
/home/lhahn/Documents/OpenGL-Utils/GLEW/glew-1.11.0/lib/libGLEW.so
/home/lhahn/Documents/OpenGL-Utils/GLEW/glew-1.11.0/lib/libGLEW.so.1.11
/home/lhahn/Documents/OpenGL-Utils/GLEW/glew-1.11.0/lib/libGLEW.so.1.11.0
/home/lhahn/Documents/OpenGL-Utils/GLEW/glew-1.11.0/lib/libGLEWmx.a
/home/lhahn/Documents/OpenGL-Utils/GLEW/glew-1.11.0/lib/libGLEWmx.so
/home/lhahn/Documents/OpenGL-Utils/GLEW/glew-1.11.0/lib/libGLEWmx.so.1.11
/home/lhahn/Documents/OpenGL-Utils/GLEW/glew-1.11.0/lib/libGLEWmx.so.1.11.0
/usr/lib64/libGLEW.a
/usr/lib64/libGLEW.so  
/usr/lib64/libGLEW.so.1.11
/usr/lib64/libGLEW.so.1.11.0

这表明我有图书馆。这是否意味着命令 find_package 可能不起作用?这很奇怪,因为我没有收到链接错误。

【问题讨论】:

  • 您是否将/usr/local/lib 添加到/etc/ld.so.conf 并运行ldconfig?或将您的程序与一些-Wl,-rpath 链接
  • @BasileStarynkevitch 不,我没有这样做。我应该吗?我所做的只是我在上面发布的 CMakeLists 和 glew 编译,它正在输入 glew 粘贴并进行 make 和 make install

标签: linux makefile cmake shared-libraries glew


【解决方案1】:

因此,我设法通过在 /usr/lib/ 中为 /usr/lib64 中的库创建符号链接来使其工作。

sudo ln -s /usr/lib64/libGLEW.so.1.11 /usr/lib/libGLEW.so.1.11

现在它工作正常。由于我不是 linux 方面的专家,我不知道这是否会给我带来问题。

【讨论】:

【解决方案2】:

我不知道@Ihahn 的回答是否会有任何问题,但是,如果某些程序没有找到您的共享库,那么首先找到您的库安装的文件夹并且不在您的共享库文件夹中并且然后运行sudo ldconfig &lt;location_where_your_library_or_program_was_installed&gt;。当您通过make install.Reference here. 安装/构建程序时,有时会发生这种情况。

【讨论】:

    猜你喜欢
    • 2011-05-29
    • 2017-11-05
    • 2022-01-04
    • 2016-10-26
    • 2013-01-24
    相关资源
    最近更新 更多