我正在遵循此页面中的说明,并且此页面尝试在 Ubuntu Linux 上构建和使用共享库。
我在我的 PC 上使用交叉编译器构建库和应用程序,而不是将文件复制到目标系统并在那里运行。
最后,我处于正确定义所有符号链接并且我能够运行应用程序的阶段 - 但不是以所需的形式。
假设我libtest.so.1.0
在目录中有一个共享库/home/ysap/libs
。然后我创建了符号链接libtest.so.1
并libtest.so
在同一个目录中,都指向库文件。
在目录中,我有一个使用该库/home/ysap/apps
的应用程序。app.e
test
现在,要运行应用程序,我可以输入:
> LD_LIBRARY_PATH=/home/ysap/libs ./app.e
并且应用程序运行良好。但是,我想消除分配,所以我尝试输入:
> export LD_LIBRARY_PATH=/home/ysap/libs
> ./app.e
但不幸的是,我收到一条错误消息,说:
./app.e: error while loading shared libraries: libtest.so.1: cannot open shared object file: No such file or directory
我也尝试输入:
> ldconfig -n /home/ysap/libs
和
> sudo ldconfig -n /home/ysap/libs
但这无济于事。
我究竟做错了什么?如何让 app.e 在没有变量分配的情况下运行?
更新 1:
该应用程序使用该mmap()
调用,因此它必须以sudo权限运行。实际的调用行是:
> sudo LD_LIBRARY_PATH=/home/ysap/libs ./app.e
sudo环境中是否可能export
没有更新 -ed 变量?
更新 2:
输出ldd ./app.e
:
libtest.so.1 => /home/ysap/libs/libtest.so.1 (0xb6faa000)
libgcc_s.so.1 => /lib/arm-linux-gnueabi/libgcc_s.so.1 (0xb6f85000)
libc.so.6 => /lib/arm-linux-gnueabi/libc.so.6 (0xb6ea4000)
/lib/ld-linux.so.3 (0xb6fb7000)