2013-07-11 4 views
8

मैं लिनक्स मिंट के 64-बिट भंडार से आर्म-लिनक्स-gnueabi-gcc का उपयोग कर नोकिया एन 9 फोन के लिए संकलित प्रोग्राम (वर्तमान में libav से avconv) को पार करने की कोशिश कर रहा हूं। कंपाइलर का libc संस्करण 2.15 है और फोन में libc-2.10.1 है। गणित पुस्तकालय में उनकी असंगतता है, जो मुझे एक segfault देता है जब मैं libav से avconv प्रोग्राम संकलित और चलाता हूं।क्रॉस संकलन: जीसीसी अनदेखा --sysroot

मुझे पुराने libc संस्करण के खिलाफ संकलन और लिंक करने की आवश्यकता होगी, लेकिन मुझे काम करने के लिए --sysroot विकल्प प्राप्त करने में कामयाब नहीं रहा है।

मैंने बार-बार कॉन्फ़िगर करने और संकलित करने से बचने के लिए एक छोटा परीक्षण कार्यक्रम बनाया।

arm-linux-gnueabi-gcc --sysroot=/opt/CrossCompilation/NokiaN9/ -o output.sysroot hello.c 
arm-linux-gnueabi-gcc -o output.nosysroot hello.c 

दोनों आदेश एक समान आउटपुट फ़ाइल बनाते हैं।

#include <stdio.h> 
#include <math.h> 

int main() { 
    printf("Hello, World! Sin = %f\n", sin(0.6451)); 
} 

अजीब बात यह है कि जीसीसी पूरी तरह से --sysroot विकल्प पर ध्यान नहीं देता है: यह क्या hello.c लग रहा है की तरह है।

arm-linux-gnueabi-gcc --sysroot=/foo/bar -o output.foobar hello.c 

यह भी किसी भी त्रुटि के बारे में शिकायत नहीं कर रहा है: यदि मैं sysroot करने के लिए एक nonexisting निर्देशिका पारित, यह अभी भी बिल्कुल वैसा ही उत्पादन द्विआधारी पैदा करता है। समस्या क्या है?

+4

'arm-linux-gnueabi-gcc -v' के साथ कंपाइलर चलाएं और ** के साथ-sysroot ** के मान को देखें; यह निर्देशिका है जिसके साथ संकलक बनाया गया था। यदि आपके पास यह मशीन आपकी मशीन पर मौजूद है (शायद एक अलग कंपाइलर के साथ), तो '--sysroot' काम नहीं कर सकता है। 'Gcc' संस्करण क्या है? –

+0

परिभाषित कोई "--with-sysroot" नहीं है। जीसीसी संस्करण 4.6.3 – trololo

+0

है लेकिन इसके बजाय 'grep/usr/arm' पाता है "--with-gxx-include-dir =/usr/arm-linux-gnueabi/include/C++/4.6.3", "- समावेशी =/usr/arm-linux-gnueabi/शामिल करें "," --with-headers =/usr/arm-linux-gnueabi/शामिल करें ", और" --with-libs =/usr/arm-linux-gnueabi/lib "। – trololo

उत्तर

1

के बाद से मैं टिप्पणियों को पढ़ने से पहले इस के साथ खिलवाड़ कुछ दिनों के बर्बाद किया, मैं एक जवाब के रूप artless noise की टिप्पणियाँ पोस्ट करने के लिए जा रहा हूँ:

"arm-linux-gnueabi-gcc -v साथ संकलक चलाने और --with-sysroot के मूल्य पर गौर; यह निर्देशिका है जिसके साथ कंपाइलर बनाया गया था। यदि आपके पास यह मशीन आपकी मशीन पर मौजूद है (शायद एक अलग कंपाइलर के साथ), तो --sysroot काम नहीं कर सकता है [; और यदि आप --with-sysroot देखें और इसके बजाय --with-libs देखें , इसका मतलब है कि आपका जीसीसी --sysroot समर्थन के बिना संकलित किया गया है। "

+0

कोई समाधान है? – user1651758

+0

यह थोड़ी देर हो गया है क्योंकि मैंने इसके साथ गड़बड़ की है, लेकिन यदि आपके पास '--with-sysroot' के बजाय '--with-libs' है, तो शायद इसका उपयोग करें? या एक और टूलचेन डाउनलोड करें, या अपना खुद का निर्माण करें। –

संबंधित मुद्दे