我有一些第三方库并包含(我已将它们复制到此位置/ usr / ssd / include和/ usr / ssd / lib),我需要将其与我的应用程序链接。我刚刚创建了一个测试应用程序,看看我是否可以链接好。但是,当我尝试运行我的应用程序时,我收到以下消息。
./app: error while loading shared libraries: libssdn.so: cannot open shared object file: No such file or directory
在命令行上我编译如下:
gcc -g -Wall -I/usr/ssd/include -L/usr/ssd/lib -lssdn test_app.c -o app
所有内容都可以编译,因为我没有收到任何警告或错误。但是,当我尝试运行应用程序时出现错误。
在usr / ssd / lib中,该库名为libssdn.so
我一直在寻找解决方案,我已经阅读了有关-rpath,-Wl和LD_LIBRARY_PATH的内容,但不确定它们是什么以及如何在编译时包含它们。
我正在使用Ubuntu 9.04 Linux,
感谢您的任何建议,
答案 0 :(得分:3)
测试将$ us_L / ssd / lib添加到$ LD_LIBRARY_PATH是否有帮助:
在shell中:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/ssd/lib
如果这样可以解决问题,可以通过将/ usr / ssd / lib添加到/etc/ld.so.conf或运行
来使其永久化ldconfig -n /usr/ssd/lib
答案 1 :(得分:2)
我个人的偏好不是将共享对象的位置烘焙到可执行文件中(这是-rpath会做的)。
相反,您应该在运行时将/ usr / ssd / lib添加到LD_LIBRARY_PATH。假设您正在运行bash或类似shell的bash,请执行:
export LD_LIBRARY_PATH=/usr/ssd/lib:${LD_LIBRARY_PATH}
一旦你这样做,就可以运行你的可执行文件了。