Problem
Getting an "relocation R_X86_64_32 against `.bss' cannot be used when making a shared object; recompile with -fPIC"
Solution
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
A 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 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.
- Use the "--disable-shared" option in grib_api. In this case no dynamic library will be produced (just the static version) and the problem won't be applicable any more.
Related articles
Content by label
There is no content with the specified labels