2012-10-11 31 views
10

के साथ एआरएम के लिए सीएमके संकलन कैसे पार करें संक्षेप में मैं सीएमके के साथ संकलित सीएमके को पार करने की कोशिश कर रहा हूं, और मुझे नहीं लगता कि मैं पुस्तकालयों को सही तरीके से जोड़ रहा हूं। मैं जो करना चाहता हूं वह संभव नहीं हो सकता है, लेकिन मुझे कम से कम यह जानना अच्छा लगेगा कि ऐसा क्यों संभव नहीं है।सीएमके

सिस्टम: होस्ट एक कैविम एआरएम 9 सीपीयू के साथ Linux box है। यह वर्तमान में लिनक्स कर्नेल और Debian 5.0 (लेनी) का संस्करण 2.6.24.4 चला रहा है। मेरा वर्कस्टेशन Core i5 उबंटू   12.04 एलटीएस (सटीक पांगोलिन) चल रहा है।

मेरा समग्र लक्ष्य ROS लिनक्स बॉक्स पर चलाना है। मुझे डेबियन   6.0 (निचोड़) बाइनरी के अंगूठे के समर्थन की आवश्यकता होती है, क्योंकि डेवियन   5.0 (लेनी) के लिए आवश्यक पैकेज उपलब्ध नहीं हैं, इसलिए मुझे एपीटी का उपयोग करने के बजाय स्रोत से संकलन करना होगा। मैंने आवश्यक विभिन्न पुस्तकालयों को स्थापित करने की प्रगति की, लेकिन जब मुझे 1.3.1 कदम उठाने और सीएमके चलाने की कोशिश की गई, तो मुझे त्रुटि मिली

सीएमके 2.8 या उच्चतर आवश्यक है। आप संस्करण 2.6.0

अगला मैंने लिनक्स बॉक्स पर सीएमके 2.8.8 को डाउनलोड और निर्माण करने का प्रयास किया, लेकिन यह सिस्टम के लिए बहुत अधिक था। जब यह असफल रहा, तो मैंने निर्माता की वेबसाइट पर सुझाए गए टूलचेन को डाउनलोड किया और सीएमके एक्जिक्यूटिव बनाने के लिए [www.cmake.org/Wiki/CMake_Cross_Compiling] पर क्रॉस-कंपाइलिंग मार्गदर्शिका का उपयोग किया। /usr/lib/libstdc++.so.6: संस्करण `GLIBCXX_3.4.14

# This one is important 
SET(CMAKE_SYSTEM_NAME Linux) 

# Specify the cross compiler 
SET(CMAKE_C_COMPILER /pathto/crosstool-linux-gcc-4.5.2-gclibc-2.9-oabi/arm-unknown-linux-gnu/bin/arm-unknown-linux-gnu-gcc) 
SET(CMAKE_CXX_COMPILER /pathto/crosstool-linux-gcc-4.5.2-gclibc-2.9-oabi/arm-unknown-linux-gnu/bin/arm-unknown-linux-gnu-g++) 

# Where is the target environment 
SET(CMAKE_FIND_ROOT_PATH /pathto/crosstool-linux-gcc-4.5.2-gclibc-2.9-oabi/arm-unknown-linux-gnu /pathto/crosstool-linux-gcc-4.5.2-gclibc-2.9-oabi/arm-unknown-linux-gnu/arm-unknown-linux-gnu) 

# 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) 

हालांकि, लिनक्स बॉक्स पर द्विआधारी के उपयोग त्रुटि

cmake देता है: यहाँ मेरी toolchain फ़ाइल है 'नहीं मिला (cmake के लिए आवश्यक)

पर्याप्त ज़रूर, पुस्तकालय वहाँ नहीं है:

prompt# strings /usr/lib/libstdc++.so.6 | grep GLIBC 
GLIBCXX_3.4 
GLIBCXX_3.4.1 
GLIBCXX_3.4.2 
GLIBCXX_3.4.3 
GLIBCXX_3.4.4 
GLIBCXX_3.4.5 
GLIBCXX_3.4.6 
GLIBCXX_3.4.7 
GLIBCXX_3.4.8 
GLIBCXX_3.4.9 
GLIBCXX_3.4.10 
GLIBC_2.3 
GLIBC_2.0 
GLIBC_2.3.2 
GLIBC_2.1 
GLIBC_2.1.3 
GLIBC_2.2 
GLIBCXX_FORCE_NEW 
GLIBCXX_DEBUG_MESSAGE_LENGTH 

मैंने पहले कभी संकलित नहीं किया है, लेकिन मैं दो परिदृश्यों में से एक को देख सकता हूं: या तो बाइनरी मेजबान मशीन पर ग्लिबक्स के उच्च संस्करण के लिंक के साथ बनाई गई है या निर्माता का टूलचेन उनकी छवि से अधिक आधुनिक है। मुझे नहीं पता कि यह कैसे हो रहा है या कुछ और हो रहा है, जिसे मैं नहीं जानता।

मेरे पिछले प्रयास स्थिर पार संकलित करने के लिए CMake उम्मीद है कि साथ

cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain-technologic.cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXE_LINKER_FLAGS_RELEASE="-static" .. 

मैं त्रुटियों का निर्माण हो गया जोड़ने त्रुटि से छुटकारा पाने की कोशिश कर रहा शामिल है, और है कि द्विआधारी या तो काम नहीं किया। मुझे मिल गया:

FATAL: kernel too old 
Segmentation fault 

मैं लिनक्स बॉक्स पर glibcxx 3.4.14 स्थापित करने की कोशिश करते हैं, लेकिन यह नहीं लगता है जैसे कि यह इस प्रोसेसर के लिए उपलब्ध है।

मैंने सीएमके निर्भरताओं या सिस्टम आवश्यकताओं की खोज करने की कोशिश की है और कुछ भी नहीं मिल रहा है। मैंने सीएमके बनाने के तरीके पर भी खोज की है, लेकिन ज्यादातर खोज सीएमके के निर्माण के बजाय सीएमके के साथ अन्य चीजों को कैसे विकसित करें।

उत्तर

3

मैं सीएमके का उपयोग करके एआरएम 9 उपकरणों के लिए बहुत कुछ संकलित करता हूं, और वास्तव में ऐसा लगता है कि आप अपने लक्षित डिवाइस पर उसी libs से लिंक नहीं कर रहे हैं।ऐसा करने के लिए आपको स्वयं को सीएमके बनाने की आवश्यकता नहीं है, क्योंकि संस्करण 2.6 के बाद से क्रॉस-कंपाइलिंग के लिए इसका अच्छा समर्थन है। बस सुनिश्चित करें कि आपने CMAKE_FIND_ROOT_PATH वैरिएबल को उस पथ पर सेट किया है जहां आपके पास अपने लक्षित डिवाइस पर रूट फाइल सिस्टम की सटीक प्रति है (लाइब्रेरी और लक्ष्य प्रोसेसर के लिए पूर्व-संकलित बाइनरी के साथ)। इससे आपकी समस्याएं हल होनी चाहिए।

एक साइडेनोट के रूप में, मुझे अपने क्रॉस-कंपाइलर्स बनाने के लिए crosstool-ng का उपयोग करना पसंद है। यह वास्तव में एक अच्छा टूल है जो आपको स्क्रैच से बनाने में मदद करता है, इसलिए मैं मूल रूप से रूट फाइल सिस्टम बनाने के लिए उपयोग किए जाने वाले कंपाइलर संस्करण और ग्लिबैक से मिलान करने का प्रयास करता हूं (मैं आमतौर पर ARMedslack से तैयार किए गए रूट फाइल सिस्टम से शुरू करता हूं, क्योंकि मैं मेरे एआरएम लक्ष्यों के लिए मेरे विकास बॉक्स और एआरएमड्सलैक के लिए स्लेकवेयर का उपयोग करें)।

+1

मेरी धारणा यह है कि सेमेक क्रॉस संकलन का समर्थन नहीं करता है क्योंकि इसमें लक्ष्य प्लेटफार्म पर ऑटो-कॉन्फ़िगरेशन परीक्षणों के लिए बाइनरी चलाने के लिए समर्थन शामिल नहीं है। क्या मै गलत हु? – schily