2015-08-28 19 views
7

CMake'i bir Linaro ARM toolchain ile bulmak için alamıyorum (birkaç farklı denemeler yaptım). İşte Yaptığım budur:CMake, Linaro toolchain ile iş parçacığı bulamıyor

  • gcc-linaro-4.9-2015.05-x86_64_arm-linux-gnueabihf.tar.xz toolchain İndirilen ve /opt ayıklanır.
    set (CMAKE_SYSTEM_NAME Linux)                   
    
    include (CMakeForceCompiler)                    
    set (TOOLCHAIN_BASE "/opt/gcc-linaro-4.9-2015.05-x86_64_arm-linux-gnueabihf/")       
    
    set (CMAKE_SYSTEM_PROCESSOR armhf-cortexa9)                
    
    CMAKE_FORCE_C_COMPILER("${TOOLCHAIN_BASE}/bin/arm-linux-gnueabihf-gcc" GNU)        
    CMAKE_FORCE_CXX_COMPILER("${TOOLCHAIN_BASE}/bin/arm-linux-gnueabihf-g++" GNU)       
    
    set (CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} /home/user/sysroot)         
    
    set (CMAKE_SIZEOF_VOID_P 4)                    
    
    set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)               
    set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)                
    set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)                
    set (CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) 
    

    Bunun kullandığı minimal örnek proje hazırlandı:
  • ben şöyle bir Toolchain-Linaro-arm.cmake dosyası oluşturduk ~/sysroot

için ilgili sistemkökü İndirilen ve çıkarılan ipler: Ben pthread kütüphaneleri biliyorum

~/threadstest $ ls 
CMakeLists.txt main.cpp 

~/threadstest $ cat CMakeLists.txt 
cmake_minimum_required(VERSION 3.0.0) 
project(threads_test) 
add_executable(test main.cpp) 
find_package(Threads REQUIRED) 
target_link_libraries(test, ${CMAKE_THREAD_LIBS_INIT}) 

~/threadstest $ cat main.cpp 
int main() { } 

~/threadstest $ mkdir build; cd build 

~/threadstest/build $ cmake -DCMAKE_TOOLCHAIN_FILE=~/Toolchain-Linaro-arm.cmake .. 
CMake Error at /opt/cmake-3.3.1-Linux-x86_64/share/cmake-3.3/Modules/FindPackageHandleStandardArgs.cmake:148 (message): 
    Could NOT find Threads (missing: Threads_FOUND) 
Call Stack (most recent call first): 
    /opt/cmake-3.3.1-Linux-x86_64/share/cmake-3.3/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE) 
    /opt/cmake-3.3.1-Linux-x86_64/share/cmake-3.3/Modules/FindThreads.cmake:205 (FIND_PACKAGE_HANDLE_STANDARD_ARGS) 
    CMakeLists.txt:8 (find_package) 

~/threadstest/build $ cat CMakeFiles/CMakeError.log 

Determining if files pthread.h exist failed with the following output: 
Change Dir: /home/user/threadstest/arm/CMakeFiles/CMakeTmp 

Run Build Command:"/usr/bin/make" "cmTC_37a3c/fast" 
/usr/bin/make -f CMakeFiles/cmTC_37a3c.dir/build.make CMakeFiles/cmTC_37a3c.dir/build 
make[1]: Entering directory `/home/user/threadstest/arm/CMakeFiles/CMakeTmp' 
Building C object CMakeFiles/cmTC_37a3c.dir/CheckIncludeFiles.c.o 
/opt/gcc-linaro-4.9-2015.05-x86_64_arm-linux-gnueabihf//bin/arm-linux-gnueabihf-gcc -o CMakeFiles/cmTC_37a3c.dir/CheckIncludeFiles.c.o -c /home/user/threadstest/arm/CMakeFiles/CMakeTmp/CheckIncludeFiles.c 
/opt/gcc-linaro-4.9-2015.05-x86_64_arm-linux-gnueabihf//bin/arm-linux-gnueabihf-gcc: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by /opt/gcc-linaro-4.9-2015.05-x86_64_arm-linux-gnueabihf//bin/arm-linux-gnueabihf-gcc) 
make[1]: Leaving directory `/home/user/threadstest/arm/CMakeFiles/CMakeTmp' 
make[1]: *** [CMakeFiles/cmTC_37a3c.dir/CheckIncludeFiles.c.o] Error 1 
make: *** [cmTC_37a3c/fast] Error 2 

Source: 
/* */ 
#include <pthread.h> 


int main(void){return 0;} 

mevcuttur:

$ find ~/sysroot -name "*pthread*" 
/home/user/sysroot/usr/lib/libpthread_nonshared.a 
/home/user/sysroot/usr/lib/libpthread.so.0 
/home/user/sysroot/usr/lib/libpthread-2.19-2014.08-1-git.so 
/home/user/sysroot/usr/lib/libpthread_p.a 
/home/user/sysroot/usr/lib/libpthread.a 
/home/user/sysroot/usr/lib/libpthread.so 
/home/user/sysroot/usr/include/bits/pthreadtypes.h 
/home/user/sysroot/usr/include/pthread.h 
Hala çapraz derleme ortamını benim ana libc'nizdeki bakarak ve olmayan bir şey gibi görünüyor

:

/opt/gcc-linaro-4.9-2015.05-x86_64_arm-linux-gnueabihf//bin/arm-linux-gnueabihf-gcc -o CMakeFiles/cmTC_37a3c.dir/CheckIncludeFiles.co -c /home/user/threadstest/arm/CMakeFiles/CMakeTmp/CheckIncludeFiles.c /opt/gcc-linaro-4.9-2015.05-x86_64_arm -linux-gnueabihf // bin/arm-linux- gnueabihf-gcc: /lib/x86_64-linux-gnu/libc.so.6: sürümü "GLIBC_2.14" bulunamadı (gerekli/opt/gcc- Linaro-4,9-2015,05-x86_64_ar m-linux-gnueabihf // bin/kol-linux-gnueabihf-gcc) pthread kütüphanede değil sorunun

cevap

1

kök neden: kök neden

olduğunu

:

/lib/x86_64-linux-gnu/libc.so.6: `` GLIBC_2.14 '' versiyonu bulunamadı (gerekli /opt/gcc-linaro-4.9-2015.05-x86_64_arm-linux-gnueabihf//bin/arm-linux- gnueabihf-gcc)

Derleyiciniz bize deniyor e yerel libc.

1) libc.so * indirilen sysroot içinde bulun ve şu komutla sürümünü kontrol: Her şey yolunda kullanım --sysroot seçenekleri ile (bu lib ise

objdump -p libc.so.6 | grep "Version References:" -A 10 

The);

Bunu manuel olarak çalışabilir:

/opt/gcc-linaro-4.9-2015.05-x86_64_arm-linux-gnueabihf//bin/arm-linux-gnueabihf-gcc -o CMakeFiles/cmTC_37a3c .dir/CheckIncludeFiles.co -c/home/kullanıcı/threadstest/kol/CMakeFiles/CMakeTmp/CheckIncludeFiles.c --sysroot/home/kullanıcı/sysroot/

2) muhtemelen derlenen Kişisel toolchain sisteminizde yüklü daha libc.so sürümü farklılık sisteminizde uygun sürümünü indirip kullanabilirsiniz.

+0

Görünüşe göre # 2 - bu alet zinciri GLIBC 2.14 gerektirir ve 2.13. Daha eski araç zincirlerini denedim ama bu noktada toolchain dosyasının doğru bir şekilde bulunmaması gerekiyordu. – zmb

+0

@zmb Peki, senin sorunun mu çözüldü? GLIBC'nizi 2.14 – Arseniy

+0

'a yükseltmek için biraz daha eski bir araç zinciri kullanarak bitirdim, bu yüzden GLIBC'yi güncellemem gerekmiyor, ancak bu problemi çözüyor. – zmb

İlgili konular