Alexander-Barth/NCDatasets.jl

Using NCDatasets.jl in R

Closed this issue · 2 comments

Not sure if I'd better submit the issue here or somewhere in R repos...

Describe the bug

I run Julia from R and then try to import NCDatasets. Three consecutive executions of the command using NCDatasets provide three different outputs:

julia> using NCDatasets
ERROR: InitError: could not load library "/home/ctroupin/.julia/artifacts/461703969206dd426cc6b4d99f69f6ffab2a9779/lib/libnetcdf.so"
/usr/lib/x86_64-linux-gnu/libcurl.so: version `CURL_4' not found (required by /home/ctroupin/.julia/artifacts/461703969206dd426cc6b4d99f69f6ffab2a9779/lib/libnetcdf.so)
during initialization of module NetCDF_jll

julia> using NCDatasets
ERROR: InitError: could not load symbol "nc_inq_libvers":
/home/ctroupin/.julia/juliaup/julia-1.8.5+0.x64.linux.gnu/bin/julia: undefined symbol: nc_inq_libvers
during initialization of module NCDatasets

julia> using NCDatasets

(yes, the 3rd execution doesn't give any message).

I've seen that the libcurl.so: version CURL_4 error is mentioned in the Known issues so I tried to call Julia with both LD_LIBRARY_PATH and LD_PRELOAD set as empty.

To Reproduce

Within a R session, call Julia and then import NCDatasets

system("julia")
julia> using NCDatasets

Tested with:

  • julia-1.9.1+0.x64.linux.gnu
  • julia-1.8.5+0.x64.linux.gnu

Expected behavior

A working NCDatasets within R.

Environment

  • operating system: Ubuntu 22.04.2 LTS
  • Julia version: julia-1.9.1+0.x64.linux.gnu (official binary)
  • Output of the julia command versioninfo()
julia> versioninfo()
Julia Version 1.9.1
Commit 147bdf428cd (2023-06-07 08:27 UTC)
Platform Info:
 OS: Linux (x86_64-linux-gnu)
 CPU: 16 × AMD Ryzen 7 3800X 8-Core Processor
 WORD_SIZE: 64
 LIBM: libopenlibm
 LLVM: libLLVM-14.0.6 (ORCJIT, znver2)
 Threads: 1 on 16 virtual cores
Environment:
 LD_LIBRARY_PATH = /usr/lib/R/lib:/usr/lib/x86_64-linux-gnu:/usr/lib/jvm/default-java/lib/server
``
- NCDatasets version: ` [85f8d34a] NCDatasets v0.12.17
- Output of `using Pkg; Pkg.status(mode=PKGMODE_MANIFEST)`

**Full output**

In case of an error, please paste the full error message and stack trace.

Maybe on can experiment with setting LD_PRELOAD (https://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick ) or LD_LIBRARY_PATH?
But the root issue is that R and julia are compiled with an incompatible curl library.
Maybe the users/developers of RCall know more?

ok thanks, so using LD_PRELOAD with the libcurl version used by Julia seems to solve the issue

export LD_PRELOAD=/home/ctroupin/.local/share/R/JuliaCall/julia/1.9.1/julia-1.9.1/lib/julia/libcurl.so.4.8.0

(then starting a R session, launching Julia, and importing NCDatasets).