链接库-rpath LD_LIBRARY_PATH

时间:2009-10-29 06:42:42

标签: c

我有一些第三方库并包含(我已将它们复制到此位置/ 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,

感谢您的任何建议,

2 个答案:

答案 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}

一旦你这样做,就可以运行你的可执行文件了。