2 回答
TA贡献1826条经验 获得超6个赞
看起来您正在尝试呼叫,然后从同一进程中调用。os.Setenv("LD_LIBRARY_PATH", ...)
C.dlopen()
从手册页删除(3):
否则,动态链接器将按如下方式搜索对象
...
如果在程序启动时,环境变量LD_LIBRARY_PATH被定义为包含以冒号分隔的目录列表,则搜索这些目录。
关键短语是,在程序启动时。我们可以在glibc源代码elf / dl-load.c的实现中看到,它查看在搜索要加载的库时已经设置的全局变量;它不查看 的当前值。dlopen
__rtld_env_path_list.dirs
$LD_LIBRARY_PATH
如果要使用 在 中查找内容,则需要在进程开始之前进行设置(例如,通过运行 )。LD_LIBRARY_PATH
C.dlopen
LD_LIBRARY_PATH=/my/path go run my-app.go
TA贡献2080条经验 获得超4个赞
正如KJ察那克齐迪斯正确回答的那样,在该过程开始后没有任何效果;您必须在开始该过程之前进行设置。LD_LIBRARY_PATH
一种常见的技术是检查 的当前值,如果它不符合您的喜好,请将其设置为新值并重新处理。LD_LIBRARY_PATH
exec
也就是说,目前还不清楚为什么你首先要设置。 将愉快地打开一个库,如果你用绝对路径调用,它不会打开。也就是说,不要这样做:LD_LIBRARY_PATH
dlopen
LD_LIBRARY_PATH
dlopen
os.Setenv("LD_LIBRARY_PATH", my_library_paths)
lib := C.dlopen(C.CString(libpath), C.RTLD_LAZY)
这样做:
lib := C.dlopen(C.CString(absolute_path_to_library), C.RTLD_LAZY)
- 2 回答
- 0 关注
- 92 浏览
添加回答
举报