添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
拉风的黄瓜  ·  Issues to install ...·  2 周前    · 
飞奔的企鹅  ·  Linux julia ...·  2 周前    · 
憨厚的大脸猫  ·  CentOS 7 安装 R ...·  2 周前    · 
鬼畜的薯片  ·  configure: WARNING: ...·  2 周前    · 
豪爽的麦片  ·  Solved - configure: ...·  2 周前    · 
安静的八宝粥  ·  A lot of leaks in the ...·  1 月前    · 
沉稳的木瓜  ·  Help with running egsea()·  3 月前    · 
潇洒的吐司  ·  37.5 Database Schema ...·  6 月前    · 
英姿勃勃的墨镜  ·  Re: DSS backened ...·  8 月前    · 

Hello,

I am using arch linux, I have manually downloaded and installed 64 bit linux version of julia from https://julialang-s3.julialang.org/bin/linux/x64/1.8/julia-1.8.3-linux-x86_64.tar.gz . I have added many packages like Flux, Knet, DataFrames etc. along with GMT. When I try to use GMT, I receive following error about libcurl

julia> using GMT
[ Info: Precompiling GMT [5752ebe1-31b9-557e-87aa-f909b540aa54]
ERROR: LoadError: could not load library "/usr/lib/libgmt.so"
/home/user/opt/julia-1.8.2/bin/../lib/julia/libcurl.so: version `CURL_OPENSSL_4' not found (required by /usr/lib/libgmt.so)
Stacktrace:
 [1] GMT_Create_Session (repeats 2 times)
   @ ~/.julia/packages/GMT/mzT4h/src/libgmt.jl:2 [inlined]
 [2] top-level scope
   @ ~/.julia/packages/GMT/mzT4h/src/get_enums.jl:9
 [3] include(mod::Module, _path::String)
   @ Base ./Base.jl:419
 [4] include(x::String)
   @ GMT ~/.julia/packages/GMT/mzT4h/src/GMT.jl:1
 [5] top-level scope
   @ ~/.julia/packages/GMT/mzT4h/src/GMT.jl:287
 [6] include
   @ ./Base.jl:419 [inlined]
 [7] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt64}}, source::Nothing)
   @ Base ./loading.jl:1554
 [8] top-level scope
   @ stdin:1
in expression starting at /home/user/.julia/packages/GMT/mzT4h/src/get_enums.jl:9
in expression starting at /home/user/.julia/packages/GMT/mzT4h/src/GMT.jl:1
in expression starting at stdin:1
ERROR: Failed to precompile GMT [5752ebe1-31b9-557e-87aa-f909b540aa54] to /home/user/.julia/compiled/v1.8/GMT/jl_WsZzh7.
Stacktrace:
 [1] error(s::String)
   @ Base ./error.jl:35
 [2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool)
   @ Base ./loading.jl:1707
 [3] compilecache
   @ ./loading.jl:1651 [inlined]
 [4] _require(pkg::Base.PkgId)
   @ Base ./loading.jl:1337
 [5] _require_prelocked(uuidkey::Base.PkgId)
   @ Base ./loading.jl:1200
 [6] macro expansion
   @ ./loading.jl:1180 [inlined]
 [7] macro expansion
   @ ./lock.jl:223 [inlined]
 [8] require(into::Module, mod::Symbol)
   @ Base ./loading.jl:1144

I have informed this issue to GMT package maintainer at github. julia 1.8.2 compile error · Issue #1052 · GenericMappingTools/GMT.jl · GitHub

I am informed that the developer is windows guy and advised to take this issue here Julia Forum.

I appreciate any help directions. Currently GMT is broken and I can not use it.

An option to address your problem is to preload the libcurl that your libgmt would expect. The syntax is

LD_PRELOAD="/path/to/libcurl.so" julia

But you’d need to know what libcurl your libgmt expects, I can’t know what that is without having more details about your system and how libgmt was installed. My initial guess would be /usr/lib/libcurl.so

Thank you for the response.

In my system, locates displays following for libcurl

locate libcurl
/usr/lib/libcurl-gnutls.so
/usr/lib/libcurl-gnutls.so.3
/usr/lib/libcurl-gnutls.so.4
/usr/lib/libcurl-gnutls.so.4.0.0
/usr/lib/libcurl-gnutls.so.4.1.0
/usr/lib/libcurl-gnutls.so.4.2.0
/usr/lib/libcurl-gnutls.so.4.3.0
/usr/lib/libcurl-gnutls.so.4.4.0
/usr/lib/libcurl-gnutls.so.4.5.0
/usr/lib/libcurl-gnutls.so.4.6.0
/usr/lib/libcurl-gnutls.so.4.7.0
/usr/lib/libcurl-gnutls.so.4.8.0
/usr/lib/libcurl.so
/usr/lib/libcurl.so.4
/usr/lib/libcurl.so.4.8.0
/usr/lib/pkgconfig/libcurl.pc
/usr/lib32/libcurl.so
/usr/lib32/libcurl.so.4
/usr/lib32/libcurl.so.4.8.0
/usr/lib32/pkgconfig/libcurl.pc
/usr/share/aclocal/libcurl.m4
/usr/share/licenses/libcurl-gnutls
/usr/share/man/man3/libcurl-easy.3.gz
/usr/share/man/man3/libcurl-env.3.gz
/usr/share/man/man3/libcurl-errors.3.gz
/usr/share/man/man3/libcurl-multi.3.gz
/usr/share/man/man3/libcurl-security.3.gz
/usr/share/man/man3/libcurl-share.3.gz
/usr/share/man/man3/libcurl-symbols.3.gz
/usr/share/man/man3/libcurl-thread.3.gz
/usr/share/man/man3/libcurl-tutorial.3.gz
/usr/share/man/man3/libcurl-url.3.gz
/usr/share/man/man3/libcurl.3.gz

The links are as follows:

 ls -l /usr/lib/libcurl*
lrwxrwxrwx 1 root root   19 Kas  1 15:47 /usr/lib/libcurl-gnutls.so -> libcurl-gnutls.so.4
lrwxrwxrwx 1 root root   23 Kas  1 15:47 /usr/lib/libcurl-gnutls.so.3 -> libcurl-gnutls.so.4.8.0
lrwxrwxrwx 1 root root   23 Kas  1 15:47 /usr/lib/libcurl-gnutls.so.4 -> libcurl-gnutls.so.4.8.0
lrwxrwxrwx 1 root root   23 Kas  1 15:47 /usr/lib/libcurl-gnutls.so.4.0.0 -> libcurl-gnutls.so.4.8.0
lrwxrwxrwx 1 root root   23 Kas  1 15:47 /usr/lib/libcurl-gnutls.so.4.1.0 -> libcurl-gnutls.so.4.8.0
lrwxrwxrwx 1 root root   23 Kas  1 15:47 /usr/lib/libcurl-gnutls.so.4.2.0 -> libcurl-gnutls.so.4.8.0
lrwxrwxrwx 1 root root   23 Kas  1 15:47 /usr/lib/libcurl-gnutls.so.4.3.0 -> libcurl-gnutls.so.4.8.0
lrwxrwxrwx 1 root root   23 Kas  1 15:47 /usr/lib/libcurl-gnutls.so.4.4.0 -> libcurl-gnutls.so.4.8.0
lrwxrwxrwx 1 root root   23 Kas  1 15:47 /usr/lib/libcurl-gnutls.so.4.5.0 -> libcurl-gnutls.so.4.8.0
lrwxrwxrwx 1 root root   23 Kas  1 15:47 /usr/lib/libcurl-gnutls.so.4.6.0 -> libcurl-gnutls.so.4.8.0
lrwxrwxrwx 1 root root   23 Kas  1 15:47 /usr/lib/libcurl-gnutls.so.4.7.0 -> libcurl-gnutls.so.4.8.0
-rwxr-xr-x 1 root root 656K Kas  1 15:47 /usr/lib/libcurl-gnutls.so.4.8.0
lrwxrwxrwx 1 root root   16 Kas  1 15:47 /usr/lib/libcurl.so -> libcurl.so.4.8.0
lrwxrwxrwx 1 root root   16 Kas  1 15:47 /usr/lib/libcurl.so.4 -> libcurl.so.4.8.0
-rwxr-xr-x 1 root root 670K Kas  1 15:47 /usr/lib/libcurl.so.4.8.0

The julia installation which is at my home ~/opt directory has the following related to libcurl

ll -l  /home/user/opt/julia-1.8.3/lib/julia/libcurl*
lrwxrwxrwx 1 user user   16 Kas 14 23:49 /home/user/opt/julia-1.8.3/lib/julia/libcurl.so -> libcurl.so.4.8.0
lrwxrwxrwx 1 user user   16 Kas 14 23:49 /home/user/opt/julia-1.8.3/lib/julia/libcurl.so.4 -> libcurl.so.4.8.0
-rwx------ 1 user user 638K Kas 14 23:49 /home/user/opt/julia-1.8.3/lib/julia/libcurl.so.4.8.0
[user@vostro pc]$ ls -l  /home/user/opt/julia-1.8.3/lib/julia/libcurl*
lrwxrwxrwx 1 user user   16 Kas 14 23:49 /home/user/opt/julia-1.8.3/lib/julia/libcurl.so -> libcurl.so.4.8.0
lrwxrwxrwx 1 user user   16 Kas 14 23:49 /home/user/opt/julia-1.8.3/lib/julia/libcurl.so.4 -> libcurl.so.4.8.0
-rwx------ 1 user user 638K Kas 14 23:49 /home/user/opt/julia-1.8.3/lib/julia/libcurl.so.4.8.0

Your suggestion gives following error.

LD_PRELOAD="/usr/lib/libcurl.so" julia
julia: symbol lookup error: /usr/lib/libcurl.so: undefined symbol: nghttp2_option_set_no_rfc9113_leading_and_trailing_ws_validation
 giordano:

That’s right. I still don’t know how it’s supposed to magically work by mixing libraries with incompatible ABIs.

What do you mean? GMT (not GMT.jl) is used by thousands of users for more than 3 decades.

GMT is built with cmake. It will link against whatever libcurl version in the system that cmake tells the compiler to use.

To find out which libcurl is used by GMT do (example from my WSL installation)

gmt --show-library
/home/j/programs/lib/libgmt.so
ldd /home/j/programs/lib/libgmt.so | grep libcurl
        libcurl-gnutls.so.4 => /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4 (0x00007f35fbb70000)
              

I have installed gmt via arch linux package manager pacman from official repositories.

$ gmt --show-library
/usr/lib/libgmt.so
$ ldd /usr/lib/libgmt.so | grep libcurl
	libcurl.so.4 => /usr/lib/libcurl.so.4 (0x00007f268c6ff000)
 joa-quim:

It will link against whatever libcurl version in the system that cmake tells the compiler to use.

Well, the “whatever” is precisely the problem :person_shrugging: