程序编译,但不能 运行 因为缺少存在的库

Program compiles, but cannot run because of missing library that exists

我有一个 OpenGL 程序。我有所有包含目录,以及所有内容。

目录结构:

Main.cpp
Lib/
GL/
GLEW/
glm/

我通过运行ning编译程序:

g++ main.cpp -lGL -lm -lX11 -lpthread -lXi -lXrandr -ldl -I. -lglfw -Llib/ -o main -lGLEW

错误在-lGLEW。程序编译没有错误,但是当我 运行 ./main 时,它给了我这个:

Error while loading shared libraries: libGLEW.so.2.2: No such file or directory.

这令人困惑,因为在我的 lib/ 目录中,libGLEW.so.2.2 存在,libGLEW.solibGLEW.a.

也存在

有人可以帮我吗?

当运行动态链接可执行文件时,链接器必须能够找到它需要的所有库。它总是搜索

  • 固定默认路径列表,如 /lib/usr/lib
  • 环境变量定义的附加路径LD_LIBRARY_PATH
  • 通过 -Wl,-rpath g++ 选项在二进制文件中硬编码的任何非标准路径。

这些是让这个非标准库为运行时链接程序所知的选项。

因此,要么在 运行 时使用 export LD_LIBRARY_PATH=<somepath>/lib,要么在构建时使用 -Wl,-rpath=<somepath>/lib(带逗号且无空格)。