【发布时间】:2014-07-25 12:27:09
【问题描述】:
我正在为 R 构建一个 C 扩展,这个库也使用 HDF5 库。
我编译了一个动态库(gcc 标志:-fPIC -shared -Wl,-soname,libmy.so -o ../lib/libmy.so 在“lib”目录中:
$ file /path/to/my/lib/libmy.so
/path/to/my/lib/libmy.so: ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), not stripped
LD_LIBRARY_PATH 已设置:
$ echo $LD_LIBRARY_PATH
/path/to/hdf5/lib:/path/to/my/lib
现在当我想从目录 /path/to/my/src 中加载我的库时
dyn.load("libmy.so")
我收到以下错误:
Error in dyn.load("libmy.so") :
unable to load shared object '/path/to/my/src/libmy.so':
/path/to/my/src/libmy.so: cannot open shared object file: No such file or directory
Execution halted
如果 libmy.so 被移动到我当前的工作目录(我不想要这个)
mv ../lib/libmy.so ./
该库似乎已加载,但 R 仍然缺少 hdf5 库中的符号:
Error in dyn.load("libmy.so") :
unable to load shared object ' /path/to/my/src/libmy.so':
/path/to/my/src/libmy.so: undefined symbol: H5T_C_S1_g
Execution halted
我也尝试了 load("my.so") 而不是 "libmy.so"。
如何加载我的动态库?
谢谢。
编辑:在 github 上添加了一个示例:https://gist.github.com/lindenb/7cd766cbb37de01f6cce
【问题讨论】:
-
HDF5 库是否在 LD_LIBRARY_PATH 中?
-
是的,它是
$ echo $LD_LIBRARY_PATH path/to/hdf5/lib:/path/to/my/lib -
路径是否正确?它应该是绝对的而不是相对的;另外 (a) ldconfig 是永久添加路径的正确方法,并且 (b) 在安装 hdf5 时不应该注意这一点,即重新访问架构的安装说明吗?
-
是的,这是完整路径,我会修复它。
-
HDF5 使用经典的 .configure --prexif=/path/ 安装在本地文件夹中
标签: c r dynamic-linking