Problem

jasper library that has been linked statically is trying to be linked into a dynamic libgrib_api.so. Libraries linked to a dynamic library must use "relocatable" code, and normally static libraries aren't. Possible solutions

Like for example the following case

/usr/bin/ld: /usr/local/lib/libjasper.a(jas_image.o): relocation R_X86_64_32 against `.bss' cannot be used when making a shared object; recompile with -fPIC
/usr/local/lib/libjasper.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make1: *** libgrib_api.la Error 1
make1: Leaving directory `src'
make: *** install-recursive Error 1

Solution

A jasper library that has been linked statically is trying to be linked into a dynamic libeccodes.so. Libraries linked to a dynamic library must use "relocatable" code, and normally static libraries aren't. Possible solutions are:

  • If possible, use a dynamic version of jasper. Build it with support for static libraries. Most rpm or deb packages already include a dynamic version that will be taken in preference. Or
  • Build jasper with the "-fPIC" CFLAG. In that case even the static library will be relocatable.
  • Disable shared libraries in ecCodes. In this case no dynamic library will be produced (just the static version) and the problem won't be applicable any more.

Related articles

Related articles appear here based on the labels you select. Click to edit the macro and add or change labels.