# Linux julia 1.8.2/1.8.3 GMT package /lib/julia/libcurl.so: version \`CURL\_OPENSSL\_4' not found error

**URL:** <https://discourse.julialang.org/t/linux-julia-1-8-2-1-8-3-gmt-package-lib-julia-libcurl-so-version-curl-openssl-4-not-found-error/90487>\
**Category:** General Usage\
**Tags:** package, plotting\
**Created:** [November 19, 2022, 4:11am UTC](https://discourse.julialang.org/t/linux-julia-1-8-2-1-8-3-gmt-package-lib-julia-libcurl-so-version-curl-openssl-4-not-found-error/90487 "2022-11-19T04:11:34Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![benibilme](https://avatars.discourse-cdn.com/v4/letter/b/e5b9ba/32.png) [@benibilme](https://discourse.julialang.org/u/benibilme)\
**Post date:** [November 19, 2022, 4:11am UTC](https://discourse.julialang.org/t/linux-julia-1-8-2-1-8-3-gmt-package-lib-julia-libcurl-so-version-curl-openssl-4-not-found-error/90487/1 "2022-11-19T04:11:34Z")

</div>

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](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
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](https://github.com/GenericMappingTools/GMT.jl/issues/1052)

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.

---

<div class="post-metadata">

**Author:** ![giordano](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/giordano/32/2166_2.png) [@giordano](https://discourse.julialang.org/u/giordano)\
**Post date:** [November 19, 2022, 5:44am UTC](https://discourse.julialang.org/t/linux-julia-1-8-2-1-8-3-gmt-package-lib-julia-libcurl-so-version-curl-openssl-4-not-found-error/90487/2 "2022-11-19T05:44:06Z")

</div>

> [@benibilme](#):
>
> Currently GMT is broken

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

---

<div class="post-metadata">

**Author:** ![giordano](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/giordano/32/2166_2.png) [@giordano](https://discourse.julialang.org/u/giordano)\
**Post date:** [November 19, 2022, 6:48am UTC](https://discourse.julialang.org/t/linux-julia-1-8-2-1-8-3-gmt-package-lib-julia-libcurl-so-version-curl-openssl-4-not-found-error/90487/3 "2022-11-19T06:48:05Z")

</div>

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

```julia
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`

---

<div class="post-metadata">

**Author:** ![benibilme](https://avatars.discourse-cdn.com/v4/letter/b/e5b9ba/32.png) [@benibilme](https://discourse.julialang.org/u/benibilme)\
**Post date:** [November 19, 2022, 7:16am UTC](https://discourse.julialang.org/t/linux-julia-1-8-2-1-8-3-gmt-package-lib-julia-libcurl-so-version-curl-openssl-4-not-found-error/90487/4 "2022-11-19T07:16:54Z")

</div>

Hello,

Thank you for the response.

In my system, locates displays following for libcurl

```julia
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:

```julia
 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

```julia
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.

```julia
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

```

---

<div class="post-metadata">

**Author:** ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)\
**Post date:** [November 19, 2022, 4:25pm UTC](https://discourse.julialang.org/t/linux-julia-1-8-2-1-8-3-gmt-package-lib-julia-libcurl-so-version-curl-openssl-4-not-found-error/90487/5 "2022-11-19T16:25:46Z")

</div>

> [@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.

---

<div class="post-metadata">

**Author:** ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)\
**Post date:** [November 19, 2022, 4:57pm UTC](https://discourse.julialang.org/t/linux-julia-1-8-2-1-8-3-gmt-package-lib-julia-libcurl-so-version-curl-openssl-4-not-found-error/90487/6 "2022-11-19T16:57:37Z")

</div>

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

```julia
gmt --show-library

/home/j/programs/lib/libgmt.so

```

.

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

```

---

<div class="post-metadata">

**Author:** ![benibilme](https://avatars.discourse-cdn.com/v4/letter/b/e5b9ba/32.png) [@benibilme](https://discourse.julialang.org/u/benibilme)\
**Post date:** [November 19, 2022, 6:52pm UTC](https://discourse.julialang.org/t/linux-julia-1-8-2-1-8-3-gmt-package-lib-julia-libcurl-so-version-curl-openssl-4-not-found-error/90487/7 "2022-11-19T18:52:05Z")

</div>

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

```julia
$ gmt --show-library
/usr/lib/libgmt.so

$ ldd /usr/lib/libgmt.so | grep libcurl
	libcurl.so.4 => /usr/lib/libcurl.so.4 (0x00007f268c6ff000)

```

---

<div class="post-metadata">

**Author:** ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)\
**Post date:** [November 19, 2022, 7:10pm UTC](https://discourse.julialang.org/t/linux-julia-1-8-2-1-8-3-gmt-package-lib-julia-libcurl-so-version-curl-openssl-4-not-found-error/90487/8 "2022-11-19T19:10:43Z")

</div>

I’m afraid the reason for the failure is that on Arch Linux, Julia’s and system’s libcurl versions are incompatible.

---

<div class="post-metadata">

**Author:** ![giordano](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/giordano/32/2166_2.png) [@giordano](https://discourse.julialang.org/u/giordano)\
**Post date:** [November 19, 2022, 11:22pm UTC](https://discourse.julialang.org/t/linux-julia-1-8-2-1-8-3-gmt-package-lib-julia-libcurl-so-version-curl-openssl-4-not-found-error/90487/9 "2022-11-19T23:22:47Z")

</div>

> [@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 🤷

---

<div class="post-metadata">

**Author:** ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)\
**Post date:** [November 20, 2022, 12:43am UTC](https://discourse.julialang.org/t/linux-julia-1-8-2-1-8-3-gmt-package-lib-julia-libcurl-so-version-curl-openssl-4-not-found-error/90487/10 "2022-11-20T00:43:52Z")

</div>

I don’t think so.

---

<div class="post-metadata">

**Author:** ![jwalker](https://avatars.discourse-cdn.com/v4/letter/j/9fc29f/32.png) [@jwalker](https://discourse.julialang.org/u/jwalker)\
**Post date:** [July 19, 2023, 9:17pm UTC](https://discourse.julialang.org/t/linux-julia-1-8-2-1-8-3-gmt-package-lib-julia-libcurl-so-version-curl-openssl-4-not-found-error/90487/12 "2023-07-19T21:17:24Z")

</div>

Sorry to resurrect this. Could you explain? Would it be possible to resolve this incompatibility?

---

<div class="post-metadata">

**Author:** ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)\
**Post date:** [July 20, 2023, 6:23pm UTC](https://discourse.julialang.org/t/linux-julia-1-8-2-1-8-3-gmt-package-lib-julia-libcurl-so-version-curl-openssl-4-not-found-error/90487/13 "2023-07-20T18:23:47Z")

</div>

This is no longer an issue (as long as Julia 1.10dev is not used) because GMT now uses a GMT\_jll artifact that shelters from using libcurl’s system library.

---

<div class="post-metadata">

**Author:** ![gustaphe](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gustaphe/32/18174_2.png) [@gustaphe](https://discourse.julialang.org/u/gustaphe)\
**Post date:** [August 1, 2023, 1:13pm UTC](https://discourse.julialang.org/t/linux-julia-1-8-2-1-8-3-gmt-package-lib-julia-libcurl-so-version-curl-openssl-4-not-found-error/90487/14 "2023-08-01T13:13:50Z")

</div>

I’m seeing the error in `+1.9.0`, `+1.9.1`, `+release`, `+alpha` and `+beta`.

---

<div class="post-metadata">

**Author:** ![joa-quim](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/joa-quim/32/227_2.png) [@joa-quim](https://discourse.julialang.org/u/joa-quim)\
**Post date:** [August 1, 2023, 7:06pm UTC](https://discourse.julialang.org/t/linux-julia-1-8-2-1-8-3-gmt-package-lib-julia-libcurl-so-version-curl-openssl-4-not-found-error/90487/15 "2023-08-01T19:06:25Z")

</div>

Sorry, are you saying that installing GMT for the first time (with ] add GMT) in Arch Linux gives an error of conflicting versions of the system’s libcurl library? (I have no idea on why that could occur).

---

<div class="post-metadata">

**Author:** ![gustaphe](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gustaphe/32/18174_2.png) [@gustaphe](https://discourse.julialang.org/u/gustaphe)\
**Post date:** [August 17, 2023, 9:13am UTC](https://discourse.julialang.org/t/linux-julia-1-8-2-1-8-3-gmt-package-lib-julia-libcurl-so-version-curl-openssl-4-not-found-error/90487/16 "2023-08-17T09:13:01Z")

</div>

Sorry, I missed the notification, and looking back I must have read the discussion too quickly. I’m seeing this error not from GMT.jl but from Plots.jl (gr backend). Taking it up on Github.
