CMAKE ile çapraz derleme ayarlayarak bazı sorunlar yaşıyorum. Kullandığım takım zinciri, cmake dışında mükemmel çalışan yocto'da yaratıldı.CMAKE, derleme işlemi sırasında eksik sysroot eksik
Ben kurulum için bir öğretici aşağıdaki araç zinciri dosyasını takip etmiş:
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_SYSTEM_PROCESSOR arm)
# specify the cross compiler
SET(tools /opt/poky/1.7.1/sysroots/x86_64-pokysdk-linux/usr)
SET(CMAKE_C_COMPILER ${tools}/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc)
SET(CMAKE_CXX_COMPILER ${tools}/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc)
# set sysroot
SET(CMAKE_SYSROOT /home/sifu/test-yocto/qemuarmdfs)
#SET(CMAKE_FIND_ROOT_PATH /home/sifu/test-yocto/qemuarm)
# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
Ve aşağıdaki hatayı alıyorum çalışan cmake
The C compiler
"/opt/poky/1.7.1/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc"
is not able to compile a simple test program.
It fails with the following output:
Change Dir: /home/sifu/Projects/mv/doublepump-single-pump-sw.ss016m21_swapp/cc/CMakeFiles/CMakeTmp
Run Build Command:/usr/bin/make "cmTryCompileExec4012536451/fast"
/usr/bin/make -f CMakeFiles/cmTryCompileExec4012536451.dir/build.make
CMakeFiles/cmTryCompileExec4012536451.dir/build
make[1]: Entering directory
`/home/sifu/Projects/mv/doublepump-single-pump-sw.ss016m21_swapp/cc/CMakeFiles/CMakeTmp'
/usr/bin/cmake -E cmake_progress_report
/home/sifu/Projects/mv/doublepump-single-pump-sw.ss016m21_swapp/cc/CMakeFiles/CMakeTmp/CMakeFiles
1
Building C object
CMakeFiles/cmTryCompileExec4012536451.dir/testCCompiler.c.o
/opt/poky/1.7.1/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc
-O2 -pipe -g -feliminate-unused-debug-types -o
CMakeFiles/cmTryCompileExec4012536451.dir/testCCompiler.c.o -c
/home/sifu/Projects/mv/doublepump-single-pump-sw.ss016m21_swapp/cc/CMakeFiles/CMakeTmp/testCCompiler.c
Linking C executable cmTryCompileExec4012536451
/usr/bin/cmake -E cmake_link_script
CMakeFiles/cmTryCompileExec4012536451.dir/link.txt --verbose=1
/opt/poky/1.7.1/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc
-O2 -pipe -g -feliminate-unused-debug-types -Wl,-O1 -Wl,--hash-style=gnu
-Wl,--as-needed CMakeFiles/cmTryCompileExec4012536451.dir/testCCompiler.c.o
-o cmTryCompileExec4012536451 -rdynamic
... (A lot of ld errors similar to the one below)
/opt/poky/1.7.1/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/4.9.1/ld:
cannot find crtn.o: No such file or directory
collect2: error: ld returned 1 exit status
make[1]: Leaving directory
`/home/sifu/Projects/mv/doublepump-single-pump-sw.ss016m21_swapp/cc/CMakeFiles/CMakeTmp'
elle yukarıda günlüğüne açıklanan gcc komutu çalıştırırsanız --sysroot =/home/sifu/test-yocto/qemuarmdfs ile benim için çalışıyor. Araç zinciri dosyasına sysroot yolu eklendiğinde neden sysroot bayrağını kullanmıyoruz?
CMake, derleyicinin '--sysroot' seçeneğini desteklediğini algılamak için başarısız görünüyor. Yapılandırılırken 'C derleyici tanımlaması CMake'in GNU çıkışı mıdır? BTW, "CMAKE_C_COMPILER" değişken tanımında "gnueabi-gcc" den önce hata alanlı araç zinciri gösterirsiniz. Bu araç orjinal toolchain dosyanızda yok, değil mi? – Tsyvarev
Yapılandırırken, doğru C derleyicisini algılar 'C derleyici tanımlaması GNU 4.9.1'dir. CMAKE_C_COMPILER'daki alan sadece bir kesme ve yapıştırma sorunuydu, orijinal soruyu düzenledim. – user1178014
Emin değilim, ancak CMUM projesini yapmaya çalıştığınız CMake_C_FLAGS'yi bir şekilde değiştirdi, bu nedenle --sysroot seçeneği yok oluyor. Araç zincirinizle basit "Merhaba dünya" programı oluşturmaya çalışabilir misiniz? – Tsyvarev