为何在linux下添加DL_LOAD_PATH并不起作用?


如图所示,我在/home/linan/workspace/julia/lib/ 目录下面有libDolphinDBAPI.so和libmy_dolphindb_api.so两个文件, 其中libmy_dolphindb_api.so提供的API依赖于libDolphinDBAPI.so这个文件。 打开这个so文件的方式有两种:

方式一:在/home/linan/workspace/julia/lib/目录下启动Julia,并执行如下命令:
图片
这个so是可以正常打开。

方式二:
在任意目录运行julia, 并执行如下命令:
图片
则打开so失败, 报错是找不到libDolphinDBAPI.so。
这里很疑惑, 在方式二中, 我明明已经将路径 /home/linan/workspace/julia/lib/ 添加到了Libc.Libdl.DL_LOAD_PATH中, 但是似乎并没有起到预想的作用。 同样使用方法二, 在windows中是可以找到正确的依赖的。 为何在linux下添加DL_LOAD_PATH并不起作用?

我找到解决办法了,在linux下添加一下系统环境变量

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/workspace/julia/lib/

也可以将这条语句写到.bash_profile里面自动执行。 配置好这个环境变量之后,在julia里面也不用执行

push!(Libc.Libdl.DL_LOAD_PATH, dolphindblib_path)

可以直接用

lib = Libc.Libdl.dlopen("libmy_dolphindb_api")

来打开so文件。效果如图。
图片
图片

ENV["LD_LIBRARY_PATH]