cross compiling why cant ld find shared library /

2019-07-18 16:14发布

问题:

Im trying to cross-compile and link aggregate on ubuntu for my arm-router and I get the following error. In the past I think I have been able to workaround this by setting the appropriate environment variable but this time is not working . Can anyone help me figure out why this might not work:

/home/ubuntu/Downloads/toolchain-arm_cortex-a9_gcc-4.9-linaro_musl-1.1.2_eabi/bin/../lib64/gcc/arm-openwrt-linux-muslgnueabi/4.9.1/../../../../arm-openwrt-linux-muslgnueabi/bin/ld:

cannot find -lpopt

however libpopt.so exists in : lrwxrwxrwx 1 root root 34 Sep 10 12:46 /lib/x86_64-linux-gnu/libpopt.so -> /lib/x86_64-linux-gnu/libpopt.so.0

I set the following environment variables , in order of desperation, to no avail.

LIBRARY_PATH=/lib/x86_64-linux-gnu/ LD_LIBRARY_PATH=/lib/x86_64-linux-gnu/ PATH=/lib/x86_64-linux-gnu/:/usr/include/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Thinking that it might be caused because it might be a target architecture issue (ie maybe i need libpopt.so built for the target of the cross-compile) I copied the libpopt.so from the router to my ubuntu and set the paths again. Again to no avail.

What might I be doing wrong?

Thanks

回答1:

Please, please don't be copying ARM binaries into /lib/x86_64-linux-gnu. This is a great way to mess up your Linux installation.

Instead, make a directory for cross-compilation dependencies, put the foreign libraries there, and put that directory on your linker search path with the -L option.



回答2:

I had to specify the path to the lib using -L in the Makefile as follows: -L/lib/x86_64-linux-gnu/

additionally I did have to use the target arhchitecture version of libpopt.so which i copied into a new dir and used that in the argument to -L/home/Downloads/lib/. For whatever reason LIBRARY_PATH and LD_LIBRARY_PATH were not being picked up.



标签: c gcc linker ld