2015-08-28 11 views
7

के साथ धागे नहीं मिल पा रहे हैं। मुझे सीनेक को लिनारो एआरएम टूलचेन (मैंने कई अलग-अलग प्रयास किए हैं) के साथ धागे ढूंढने के लिए नहीं मिल सकता है। यहाँ मैं क्या किया है है:सीएमके को लिनारो टूलचेन

को निकाले मैं एक Toolchain-Linaro-arm.cmake फ़ाइल है कि इस तरह दिखता है बनाया:

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) 

मैं एक न्यूनतम उदाहरण परियोजना है कि का उपयोग करता है बनाया धागे:

~/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;} 

मुझे पता है कि पाथ्रेड पुस्तकालय मौजूद हैं:

$ 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 

यह कुछ की तरह लग रहा है अभी भी और नहीं मेरी देशी libc में दिख रही है पार संकलन पर्यावरण:

/opt/gcc-linaro-4.9-2015.05-x86_64_arm-linux-gnueabihf//bin/arm-linux-gnueabihf-gcc -o सीएमकेफ़ाइल/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: संस्करण "GLIBC_2.14" नहीं मिला (/ opt/gcc- Linaro-4.9-2,015.05-x86_64_ar एम-लिनक्स gnueabihf // bin/हाथ-linux-gnueabihf-जीसीसी) pthread पुस्तकालय में समस्या का

उत्तर

1

मूल कारण नहीं:

मूल कारण है:

/lib/x86_64-linux-gnu/libc.so.6: संस्करण 'GLIBC_2.14' नहीं मिला (/opt/gcc-linaro-4.9-2015.05-x86_64_arm-linux-gnueabihf//bin/arm-linux- gnueabihf-gcc)

आपका कंपाइलर हमारे लिए प्रयास कर रहा है ई आपका स्थानीय libc

1) libc.so * डाउनलोड किया sysroot में खोजें और निम्न आदेश के साथ संस्करण की जांच:

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

अगर सब कुछ ठीक उपयोग इस lib (है --sysroot विकल्पों के साथ);

आप मैन्युअल रूप से ऐसा करने की कोशिश कर सकते हैं:

/opt/gcc-linaro-4.9-2015.05-x86_64_arm-linux-gnueabihf//bin/arm-linux-gnueabihf-gcc -ओ CMakeFiles/cmTC_37a3c .dir/CheckIncludeFiles.co -c/home/user/threadstest/arm/CMakeFiles/CMakeTmp/CheckIncludeFiles।ग --sysroot/घर/उपयोगकर्ता/sysroot/

2) शायद के साथ संकलित आपका toolchains libc.so अपने सिस्टम पर स्थापित की तुलना संस्करण भिन्न होते हैं, आपके सिस्टम पर डाउनलोड उपयुक्त संस्करण और इसका इस्तेमाल करते हैं।

+0

ऐसा लगता है कि यह # 2 था - इस टूलचेन को जीएलबीबी 2.14 की आवश्यकता है और मैं 2.13 पर हूं। मैंने पुराने टूलचेन की कोशिश की लेकिन मुझे उस बिंदु पर टूलचैन फ़ाइल सही नहीं होनी चाहिए। – zmb

+0

@zmb तो, क्या आपकी समस्या हल हो गई है? 2.14 – Arseniy

+0

तक अपनी जीएलबीबीसी को अपग्रेड करने के लिए बेहतर है, मैं थोड़ा पुराना टूलचैन का उपयोग कर समाप्त हुआ, इसलिए मुझे जीएलबीबीसी अपडेट करने की ज़रूरत नहीं है, लेकिन हाँ यह समस्या हल करती है। – zmb