动态库路径添加问题

GMT.jl 是 GMT 软件的 julia 接口。我已经在 MacOS 下安装好了 GMT.jl 和 GMT 软件,但是还需要把 GMT 的动态库路径告诉 Julia (如果我没理解错的话)。但是按照官方文档的说法,没有实现,官方文档链接为 https://github.com/GenericMappingTools/GMT.jl

首先我添加了 push!(Libdl.DL_LOAD_PATH, "/Users/j/programs/gmt5/lib") 以后,julia 不能正常打开。我查看 julia 的文档,发现并没有 Libdl.DL_LOAD_PATH 这个常量,只有一个Base.LOAD_PATH。我在 Base.LOAD_PATH 添加还是不能使用。

我想问一下,是我操作的问题,还是 GMT.jl 的问题

加一个 using Libdl

还是有问题

julia> using Libdl

julia> varinfo(Libdl)
name                size summary                  
––––––––––––– –––––––––– –––––––––––––––––––––––––
DL_LOAD_PATH   102 bytes 2-element Array{String,1}
Libdl         51.199 KiB Module                   
RTLD_DEEPBIND    4 bytes UInt32                   
RTLD_FIRST       4 bytes UInt32                   
RTLD_GLOBAL      4 bytes UInt32                   
RTLD_LAZY        4 bytes UInt32                   
RTLD_LOCAL       4 bytes UInt32                   
RTLD_NODELETE    4 bytes UInt32                   
RTLD_NOLOAD      4 bytes UInt32                   
RTLD_NOW         4 bytes UInt32                   
dlclose          0 bytes typeof(dlclose)          
dlext           13 bytes String                   
dllist           0 bytes typeof(dllist)           
dlopen           0 bytes typeof(dlopen)           
dlopen_e         0 bytes typeof(dlopen_e)         
dlpath           0 bytes typeof(dlpath)           
dlsym            0 bytes typeof(dlsym)            
dlsym_e          0 bytes typeof(dlsym_e)          
find_library     0 bytes typeof(find_library)     

julia> push!(Libdl.DL_LOAD_PATH, "/Applications/GMT-6.0.0rc4.app/Contents/Resources/lib")
3-element Array{String,1}:
 "@loader_path/julia"                                   
 "@loader_path"                                         
 "/Applications/GMT-6.0.0rc4.app/Contents/Resources/lib"

julia> using GMT

julia> xy = gmt("gmtmath -T0/180/1 T SIND 4.5 ADD");
ERROR: error compiling gmt: could not load library "libgmt"
dlopen(/Applications/GMT-6.0.0rc4.app/Contents/Resources/lib/libgmt.dylib, 1): Library not loaded: @executable_path/../lib/libcurl.4.dylib
  Referenced from: /Applications/GMT-6.0.0rc4.app/Contents/Resources/lib/libgmt.dylib
  Reason: Incompatible library version: libgmt.dylib requires version 10.0.0 or later, but libcurl.4.dylib provides version 7.0.0
Stacktrace:
 [1] top-level scope at none:0

看样子是 包自己的问题?我应该去提 issue ?

确定不是我的问题。已经给 GMT.jl 包作者提 issue。

用conda安装GMT6,可以正常设置运行

我当时按安装的时候, GMT6还没正式发布,所以我是下载的 dmg 安装的,就是这种安装方式导致的问题。后来 gmt 的开发者给了我一个临时的 brew 链接就好了。这个问题确实是 gmt 接口的问题,不只是 julia, 据开发者说 matlab 和 python 也有同样的问题。我去看了一下,他们现在也还没解决好。但是现在 GMT6 正式发布了,直接用 brew 就好了。具体可见https://github.com/GenericMappingTools/GMT.jl/issues/298