-lfoo vs /usr/local/lib/libfoo.so

Polytropon freebsd at edvax.de
Sat Dec 8 02:22:51 UTC 2018

On Fri, 7 Dec 2018 11:43:29 -0700, Gary Aitken wrote:
> In trying to build a dev version of a port, the cmake script includes
> many libraries explicitly, and one (-lhdf5-18) using -l:
> /usr/bin/c++ -fPIC -Wall -Wextra -Wno-write-strings -O2 -pipe
>   -I/usr/local/include/hdf5-18 -fstack-protector -isystem /usr/local/include
>   -fno-strict-aliasing  -isystem /usr/local/include -std=c++11
>   -Wno-undefined-var-template -D_OCC64 -O2 -pipe -I/usr/local/include/hdf5-18
>   -fstack-protector -isystem /usr/local/include -fno-strict-aliasing  -isystem
>   /usr/local/include -Wl,--no-undefined -shared
>   -Wl,-soname,libFreeCADBase.so -o ../../lib/libFreeCADBase.so
> ... a bunch of .o files ...
>   -Wl,-rpath,/usr/local/lib:/usr/local/lib/qt4: -lhdf5-18
>   /usr/local/lib/libpython2.7.so
> ... <more .so files> ...
>   -lpthread -lz /usr/local/lib/qt4/libQtCore.so
> The above command fails with
>    "/usr/bin/ld: cannot find -lhdf5-18"
> although
>    /usr/local/lib/libhdf5-18.so
> exists and the rpath flag indicates /usr/local/lib
> If I replace -lhdf5-18 with /usr/local/lib/libhdf5-18.so it works.
> Curiously (to me) -lpthread and -lz are apparently working correctly,
> or at least aren't being mis-interpreted.
> I've tried tweaking the command to use -Wl,-lhdf5-18 but that fails also.
> Can anyone explain to me what's going on?

Judging from the command presented, there is no (re)definition
of the library path, i. e., no -L parameter. This imples the
defaults are used. If I remember correctly, the system's library
path is always selected, so -lz -> /usr/lib/libz.so, as well as
-lpthread -> /usr/lib/libpthread.so will work for that reason.
As /usr/local/lib/libhdf5-18.so is in /usr/local/lib, this path
should either be part of the configuration (LDFLAGS) or named
explicitely as -L/usr/local/lib/libhdf5-18.so, similarly to the
-I/usr/local/include/hdf5-18 which is the directory expected to
contain the header files for the library in question.

So check the Makefile, maybe defaults it incorporates (or fails
to override or to extend), as well as - at least for testing -
using -L.

Reason simplified: The library referenced as "hdf5-18" (which
refers to libhdf5-18.so) cannot be found in any of the defined
library paths. This at least explains what you're seeing. :-)

Magdeburg, Germany
Happy FreeBSD user since 4.0
Andra moi ennepe, Mousa, ...

More information about the freebsd-questions mailing list