Ubuntu中使用IrrKlang库时无法加载libIrrKlang.so的问题求助
问题解决:Ubuntu下IrrKlang库运行时找不到共享文件
问题背景
在Ubuntu 22.04 LTS系统中使用g++ 11.3.0开发程序,通过IrrKlang库实现声音功能时,程序可正常编译,但运行时报错:
./main: error while loading shared libraries: libIrrKlang.so: cannot open shared object file: No such file or directory
项目目录结构:
- 根目录存放Makefile
lib/路径下存放libIrrKlang.so- 编译生成的
main可执行文件位于bin/Linux/
曾尝试将可执行文件移至根目录解决问题,但破坏原有目录结构引发其他异常;尝试添加--Wl,-rpath='../../lib'编译选项时,g++提示不识别该参数。
可行解决方案
方案1:修正rpath编译选项(推荐)
你之前的参数格式错误,正确的编译选项应为单横杠-Wl,同时确保rpath路径相对于可执行文件的位置正确(从bin/Linux/到lib/的相对路径是../../lib)。
修改Makefile中的编译命令,添加正确的rpath参数:
g++ -std=c++11 -Wall -Wno-unused-function -g -I ./include/ -L ./lib/ -Wl,-rpath='../../lib' -o ./bin/Linux/main src/main.cpp src/glad.c src/textrendering.cpp src/tiny_obj_loader.cpp src/stb_image.cpp ./lib-linux/libglfw3.a -lrt -lm -ldl -lX11 -lpthread -lXrandr -lXinerama -lXxf86vm -lXcursor -lIrrKlang
该选项会将库的相对路径嵌入到可执行文件中,运行时系统会自动前往指定路径查找共享库,无需额外设置环境变量。
方案2:运行时临时设置LD_LIBRARY_PATH
不修改编译命令,在运行可执行文件前临时设置LD_LIBRARY_PATH环境变量,指定共享库的搜索路径。修改Makefile中的run目标:
run: mkdir -p bin/Linux g++ -std=c++11 -Wall -Wno-unused-function -g -I ./include/ -L ./lib/ -o ./bin/Linux/main src/main.cpp src/glad.c src/textrendering.cpp src/tiny_obj_loader.cpp src/stb_image.cpp ./lib-linux/libglfw3.a -lrt -lm -ldl -lX11 -lpthread -lXrandr -lXinerama -lXxf86vm -lXcursor -lIrrKlang cd bin/Linux && LD_LIBRARY_PATH=../../lib ./main
此方法仅在每次运行时临时生效,不会修改可执行文件本身。
方案3:永久添加库路径到系统配置
如果希望所有用户或当前用户都能全局识别该库,可将项目lib/的绝对路径添加到系统共享库配置中:
- 以sudo权限创建文件
/etc/ld.so.conf.d/irrklang.conf,文件内容为项目lib/的绝对路径,例如:
/home/your_username/project_folder/lib
- 执行
sudo ldconfig命令更新系统库缓存
完成后,无论在哪个路径运行可执行文件,系统都会自动找到libIrrKlang.so。
内容的提问来源于stack exchange,提问作者Akim Lee
相关产品推荐
相关产品推荐

