linux - shared library not found during compilation -
so got several shared libraries trying permanently install on ubuntu system having difficulty it.
i want install libraries , headers in separate folder under /usr/local/lib
, /usr/local/include
(for example folder named agony
) clean , removing them require delete folders. looks this:
/usr/local/lib/agony/libbtigpio.so /usr/local/lib/agony/libbtidsp.so ... /usr/local/include/agony/gpio.h /usr/local/include/agony/dsp.h ...
and added file here /etc/ld.so.conf.d/agony.conf
include line describing path library folder:
$ cat /etc/ld.so.conf.d/agony.conf /usr/local/lib/agony
and perform sudo ldconfig
update library database. double check if library found ldconfig -p | grep bti*
, see following result:
$ ldconfig -p | grep bti ... libbtigpio.so (libc6,x86-64) => /usr/local/lib/agony/libbtigpio.so libbtidsp.so (libc6,x86-64) => /usr/local/lib/agony/libbtidsp.so ...
at point should able use libraries without specifying library path. when attempt compile application without providing library path (-l) fails. however, when supply gcc
library path ex:
gcc source.c -l /usr/local/lib/agony output -lbtigpio -lbtidsp
it works!!
i don't want use ld_library_path
environment variable because library going used everywhere on system , don't want other compilers worry providing ld_library_path
.
what doing wrong here?
at point should able use libraries without specifying library path
here lies confusion.
you have built shared library libbtigpio.so
(just sticking one), placed in /usr/local/lib/agony
, , updated ldconfig
database accordingly.
the effect of when run program has been linked libbtigpio
dynamic linker (/lib/x86_64-linux-gnu/ld-2.21.so
, or similar) know load library process , not need tell setting ld_library_path
in environment.
however, haven't done affects list of default library search directories hardwired build of gcc
, passes linker (/usr/bin/ld
) when link program libbtigpio
in first place.
that list of default search directories find if verbose build of program - gcc -v ...
- , pick out value of library_path
output, e.g.
library_path=/usr/lib/gcc/x86_64-linux-gnu/5/:\ /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/:\ /usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib/:\ /lib/x86_64-linux-gnu/:\ /lib/../lib/:\ /usr/lib/x86_64-linux-gnu/:\ /usr/lib/../lib/:\ /usr/lib/gcc/x86_64-linux-gnu/5/../../../:\ /lib/:\ /usr/lib
/usr/local/lib/agony
not 1 of , make 1 of have build gcc
source yourself. hence, in order link program libbtigpio
still need tell ld
find -l/usr/local/lib/agony -lbtigpio
.
Comments
Post a Comment