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 