मैं लिनक्स मिंट के 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 निर्देशिका पारित, यह अभी भी बिल्कुल वैसा ही उत्पादन द्विआधारी पैदा करता है। समस्या क्या है?
'arm-linux-gnueabi-gcc -v' के साथ कंपाइलर चलाएं और ** के साथ-sysroot ** के मान को देखें; यह निर्देशिका है जिसके साथ संकलक बनाया गया था। यदि आपके पास यह मशीन आपकी मशीन पर मौजूद है (शायद एक अलग कंपाइलर के साथ), तो '--sysroot' काम नहीं कर सकता है। 'Gcc' संस्करण क्या है? –
परिभाषित कोई "--with-sysroot" नहीं है। जीसीसी संस्करण 4.6.3 – trololo
है लेकिन इसके बजाय '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