小编ash*_*ral的帖子

加载相对于可执行路径的共享对象

我正在尝试让 C 应用程序从相对目录加载共享对象,无论我从哪里调用它。到目前为止,只有当我调用它时与可执行文件位于同一目录中时,它才有效:

~/prog$ ./my_program
Success
~/prog$ cd ..
~$ ./prog/my_program
./prog/my_program: error while loading shared libraries: libs/libmysharedobject.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

从上面的输出可以猜到,共享对象存储在该~/prog/libs/目录下。以下是相关 gcc 调用的样子:

gcc -std=c99 -ggdb -Wall -pedantic -Isrc
    -fPIC -shared -Wl,-soname,libs/libmysharedogbject.so
    -o libs/libmysharedobject.so libs/mysharedobject.c
[...]
gcc [CFLAGS omitted] -o my_program main.c
    build/src/my_program.o build/src/common.o
    -lm -Llibs -lmysharedobject
Run Code Online (Sandbox Code Playgroud)

这是输出的顶部readelf -d my_program

Dynamic section at offset 0x6660 contains 26 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
 0x0000000000000001 (NEEDED) …
Run Code Online (Sandbox Code Playgroud)

compiling dynamic-linking

3
推荐指数
1
解决办法
3744
查看次数

标签 统计

compiling ×1

dynamic-linking ×1