robamu-org / beaglebone-crosscompiling

Cross-compiling and debugging C/C++ applications for the Raspberry Pi with CMake, the TCF-Agent and Eclipse
Apache License 2.0
6 stars 2 forks source link

Library not found during link #1

Open me21 opened 3 years ago

me21 commented 3 years ago

First of all, I actually use my own helloworld project with your toolchain file, but I'm not sure if it could make any difference.

I get the following error during CMake configure stage:

[proc] Executing command: "C:\Program Files\CMake\bin\cmake.exe" --no-warn-unused-cli "-DCMAKE_MAKE_PROGRAM:STRING=C:/Users/azarubkin/Documents/Platformio Projects/ninja.exe" -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_TOOLCHAIN_FILE:FILEPATH=BBBToolchain.cmake "-Hc:/Users/azarubkin/Documents/Platformio Projects/helloworld" "-Bc:/Users/azarubkin/Documents/Platformio Projects/helloworld/build" -G Ninja
[cmake] Not searching for unused variables given on the command line.
[cmake] -- Beagle Bone Black sysroot: C:/Users/azarubkin/Documents/beaglebone/rootfs
[cmake] -- No CROSS_COMPILE environmental variable set, using default ARM linux cross compiler name arm-linux-gnueabihf
[cmake] -- Using sysroot path: C:/Users/azarubkin/Documents/beaglebone/rootfs
[cmake] -- The CXX compiler identification is GNU 8.3.0
[cmake] -- Detecting CXX compiler ABI info
[cmake] -- Detecting CXX compiler ABI info - failed
[cmake] -- Check for working CXX compiler: C:/SysGCC/beaglebone/bin/arm-linux-gnueabihf-g++.exe
[cmake] -- Check for working CXX compiler: C:/SysGCC/beaglebone/bin/arm-linux-gnueabihf-g++.exe - broken
[cmake] CMake Error at C:/Program Files/CMake/share/cmake-3.21/Modules/CMakeTestCXXCompiler.cmake:62 (message):
[cmake]   The C++ compiler
[cmake] 
[cmake]     "C:/SysGCC/beaglebone/bin/arm-linux-gnueabihf-g++.exe"
[cmake] 
[cmake]   is not able to compile a simple test program.
[cmake] 
[cmake]   It fails with the following output:
[cmake] 
[cmake]     Change Dir: C:/Users/azarubkin/Documents/Platformio Projects/helloworld/build/CMakeFiles/CMakeTmp
[cmake]     
[cmake]     Run Build Command(s):C:/Users/AZARUB~1/DOCUME~1/PLATFO~1/ninja.exe cmTC_c1a52 && [1/2] Building CXX object CMakeFiles/cmTC_c1a52.dir/testCXXCompiler.cxx.o
[cmake]     [2/2] Linking CXX executable cmTC_c1a52
[cmake]     FAILED: cmTC_c1a52 
[cmake]     cmd.exe /C "cd . && C:\SysGCC\beaglebone\bin\arm-linux-gnueabihf-g++.exe --sysroot=C:/Users/azarubkin/Documents/beaglebone/rootfs -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=hard  CMakeFiles/cmTC_c1a52.dir/testCXXCompiler.cxx.o -o cmTC_c1a52   && cd ."
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: warning: libm.so.6, needed by c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so, not found (try using -rpath or -rpath-link)
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `acos@GLIBC_2.4'
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `hypot@GLIBC_2.4'
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `cos@GLIBC_2.4'
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `fmod@GLIBC_2.4'
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `tan@GLIBC_2.4'
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `atan@GLIBC_2.4'
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `asin@GLIBC_2.4'
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `sqrt@GLIBC_2.4'
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `ceil@GLIBC_2.4'
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `atan2@GLIBC_2.4'
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `sin@GLIBC_2.4'
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `tanh@GLIBC_2.4'
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `sinh@GLIBC_2.4'
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `pow@GLIBC_2.4'
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `log@GLIBC_2.4'
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `floor@GLIBC_2.4'
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `log10@GLIBC_2.4'
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `exp@GLIBC_2.4'
[cmake]     c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld.exe: c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/libstdc++.so: undefined reference to `cosh@GLIBC_2.4'
[cmake]     collect2.exe: error: ld returned 1 exit status
[cmake]     ninja: build stopped: subcommand failed.

The libraries search dirs obtained by calling C:\SysGCC\beaglebone\bin\arm-linux-gnueabihf-g++.exe --sysroot=C:/Users/azarubkin/Documents/beaglebone/rootfs -print-search-dirs are:

libraries: =c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/;c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/;c:/sysgcc/beaglebone/bin/../lib/gcc/;c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/lib/arm-linux-gnueabihf/8/;c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/lib/arm-linux-gnueabihf/;c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/lib/;C:/Users/azarubkin/Documents/beaglebone/rootfs/lib/arm-linux-gnueabihf/8/;C:/Users/azarubkin/Documents/beaglebone/rootfs/lib/arm-linux-gnueabihf/;C:/Users/azarubkin/Documents/beaglebone/rootfs/lib/;C:/Users/azarubkin/Documents/beaglebone/rootfs/usr/lib/arm-linux-gnueabihf/8/;C:/Users/azarubkin/Documents/beaglebone/rootfs/usr/lib/arm-linux-gnueabihf/;C:/Users/azarubkin/Documents/beaglebone/rootfs/usr/lib/

The file libm.so.6 is located in C:\Users\azarubkin\Documents\beaglebone\rootfs\lib\arm-linux-gnueabihf, which is in the list, but why the linker cannot find it?

me21 commented 3 years ago

I downloaded the Beaglebone toolchain for Windows from sysprogs.com, version 8.3.0. The last invoked command invoked by g++ was:

c:/sysgcc/beaglebone/bin/../libexec/gcc/arm-linux-gnueabihf/8/collect2.exe -plugin c:/sysgcc/beaglebone/bin/../libexec/gcc/arm-linux-gnueabihf/8/liblto_plugin-0.dll -plugin-opt=c:/sysgcc/beaglebone/bin/../libexec/gcc/arm-linux-gnueabihf/8/lto-wrapper.exe -plugin-opt=-fresolution=C:\Users\AZARUB~1\AppData\Local\Temp\ccIvKx0u.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --sysroot=C:/Users/azarubkin/Documents/beaglebone/rootfs --build-id --eh-frame-hdr -dynamic-linker /lib/ld-linux-armhf.so.3 -X --hash-style=gnu -m armelf_linux_eabi -pie C:/Users/azarubkin/Documents/beaglebone/rootfs/usr/lib/arm-linux-gnueabihf/Scrt1.o C:/Users/azarubkin/Documents/beaglebone/rootfs/usr/lib/arm-linux-gnueabihf/crti.o c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/crtbeginS.o -Lc:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8 -Lc:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf -Lc:/sysgcc/beaglebone/bin/../lib/gcc -Lc:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/lib -LC:/Users/azarubkin/Documents/beaglebone/rootfs/lib/arm-linux-gnueabihf -LC:/Users/azarubkin/Documents/beaglebone/rootfs/lib -LC:/Users/azarubkin/Documents/beaglebone/rootfs/usr/lib/arm-linux-gnueabihf -LC:/Users/azarubkin/Documents/beaglebone/rootfs/usr/lib C:\Users\AZARUB~1\AppData\Local\Temp\ccsUvAbq.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc c:/sysgcc/beaglebone/bin/../lib/gcc/arm-linux-gnueabihf/8/crtendS.o C:/Users/azarubkin/Documents/beaglebone/rootfs/usr/lib/arm-linux-gnueabihf/crtn.o

Hope this helps!

me21 commented 3 years ago

Also, this library is also present at C:\SysGCC\beaglebone\arm-linux-gnueabihf\sysroot\lib\arm-linux-gnueabihf.

me21 commented 3 years ago

If I don't set CMAKE_SYSROOT (comment it out in BBBToolchain.cmake), it works. But this is not right, I think...

me21 commented 3 years ago

Found solution at https://forum.qt.io/topic/62094/cross-compiling-for-beaglebone-black-libm-so-6-not-found-but-it-is-there Needed to copy libm.so.6 from lib/arm-linux-gnueabihf/ to usr/lib/arm-linux-gnueabihf/ and rename it to libm.so. But why wasn't it found in its former location? Anyway, some corrections need to be added to Windows instruction regarding symlinks. This one was apparently broken and not copied.

me21 commented 2 years ago

I think -L option can be added to the rsync command, it will then copy all symlinks as files, plus the second step (copying missing libs) can be then omitted.