I am having trouble cross-compiling fuse-exfat. GCC can not find my fuse library. I am running the build on a x64-64 machine and compiling for ARM.
As you can see here, both the include files and the library is there:
root@2a13b22d5372:/opt/sysroot/usr/lib# ls -al | grep fuse
-rwxr-xr-x 1 root root 943 Jul 5 16:31 libfuse.la
lrwxrwxrwx 1 root root 16 Jul 5 16:31 libfuse.so -> libfuse.so.2.9.9
lrwxrwxrwx 1 root root 16 Jul 5 16:31 libfuse.so.2 -> libfuse.so.2.9.9
-rwxr-xr-x 1 root root 719756 Jul 5 16:31 libfuse.so.2.9.9
lrwxrwxrwx 1 root root 17 Jul 5 15:53 libfuse3.so -> libfuse3.so.3.6.1
lrwxrwxrwx 1 root root 17 Jul 5 15:48 libfuse3.so.3 -> libfuse3.so.3.6.1
-rwxr-xr-x 1 root root 698096 Jul 5 15:47 libfuse3.so.3.6.1
root@2a13b22d5372:/opt/sysroot/usr/include# ls -al | grep fuse
drwxr-xr-x 2 root root 4096 Jul 5 16:31 fuse
-rw-r--r-- 1 root root 246 Jul 5 16:31 fuse.h
drwxr-xr-x 2 root root 4096 Jul 5 16:03 fuse3
Running Configure does not give any errors.
root@2a13b22d5372:/opt/fuse-exfat-1.3.0# ./configure --prefix=/opt/sysroot --host=arm-linux-gnueabihf
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for arm-linux-gnueabihf-strip... arm-linux-gnueabihf-strip
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for arm-linux-gnueabihf-gcc... arm-linux-gnueabihf-gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... yes
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether arm-linux-gnueabihf-gcc accepts -g... yes
checking for arm-linux-gnueabihf-gcc option to accept ISO C89... none needed
checking whether arm-linux-gnueabihf-gcc understands -c and -o together... yes
checking for style of include used by make... GNU
checking dependency style of arm-linux-gnueabihf-gcc... gcc3
checking for arm-linux-gnueabihf-gcc option to accept ISO C99... none needed
checking for arm-linux-gnueabihf-ranlib... arm-linux-gnueabihf-ranlib
checking for arm-linux-gnueabihf-ar... arm-linux-gnueabihf-ar
checking the archiver (arm-linux-gnueabihf-ar) interface... ar
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... 64
checking for arm-linux-gnueabihf-pkg-config... no
checking for pkg-config... /usr/bin/pkg-config
configure: WARNING: using cross tools not prefixed with host triplet
checking pkg-config is at least version 0.9.0... yes
checking for UBLIO... no
checking for FUSE... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating libexfat/Makefile
config.status: creating fuse/Makefile
config.status: creating Makefile
config.status: creating libexfat/config.h
config.status: libexfat/config.h is unchanged
config.status: executing depfiles commands
Make fails with "cannot find lib" error.
root@2a13b22d5372:/opt/fuse-exfat-1.3.0# LDFLAGS="-L/opt/sysroot/usr/lib" CFLAGS="-I/opt/sysroot/usr/include" make
Making all in libexfat
make[1]: Entering directory '/opt/fuse-exfat-1.3.0/libexfat'
make all-am
make[2]: Entering directory '/opt/fuse-exfat-1.3.0/libexfat'
make[2]: Leaving directory '/opt/fuse-exfat-1.3.0/libexfat'
make[1]: Leaving directory '/opt/fuse-exfat-1.3.0/libexfat'
Making all in fuse
make[1]: Entering directory '/opt/fuse-exfat-1.3.0/fuse'
arm-linux-gnueabihf-gcc -D_FILE_OFFSET_BITS=64 -I/usr/include/fuse -g -O2 -o mount.exfat-fuse mount_exfat_fuse-main.o ../libexfat/libexfat.a -lfuse -pthread
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lfuse
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:399: mount.exfat-fuse] Error 1
make[1]: Leaving directory '/opt/fuse-exfat-1.3.0/fuse'
make: *** [Makefile:363: all-recursive] Error 1
What am I missing?
Based on the info here there's no way we can say for sure.
However, it's likely that the makefile sets the LDFLAGS
and CFLAGS
variables. Variables assigned in the makefile will take precedence over variables obtained from the environment so your variable assignments are ignored.
I recommend you try passing the variable assignments on the make command line, rather than through the environment:
$ make LDFLAGS="-L/opt/sysroot/usr/lib" CFLAGS="-I/opt/sysroot/usr/include"
(PS It's almost always a bad idea to build things and run make commands as root--in fact it's almost always a bad idea to do anything as root, except for things that require it)