tl; डॉ
मैं कैसे एक स्थिर पुस्तकालय के खिलाफ लिंक करने के लिए iOS चलाने वाले आईपैड ठिकानों पर किए गए एप्लिकेशन के लिए उपयुक्त फाइल करने के लिए एडीए स्रोत कोड संकलन कर सकते हैं? (जीसीसी एक आवश्यकता नहीं है। LLVM का उपयोग कर समाधान या दूसरों का भी स्वागत है!)एडीए पार संकलक को लक्षित करता
मैं पोर्टेबल एडीए कोड है कि मैं एक iPad/iOS परियोजना में उपयोग करना चाहते हैं का एक बड़ा पुस्तकालय है। मेरा होस्ट ओएस मैक ओएस एक्स 10.9 है (मैकपॉर्ट्स के साथ /opt/local
पर स्थापित जीसीसी 4.8.1 चल रहा है)। ऐसा करने के लिए, मैं एडीए समर्थन के साथ एक जीसीसी एआरएम क्रॉस-कंपाइलर बनाने की कोशिश कर रहा हूं।
मैं एक काम कर जीसीसी और GNAT कि एआरएम निष्पादनयोग्य बनाता निर्माण करने में सक्षम हूँ, लेकिन मैं बनाने या एडीए मानक पुस्तकालय, जो मेरे एडीए कोड
स्रोत संकुल के निर्माण के लिए आवश्यक है स्थापित करने के लिए नहीं कर पा रहे मैं 'm का उपयोग कर:
gcc-4.8.1
binutils-2.24
libiconv-1.14
gmp-5.1.3
mpc-1.0.2
mpfr-3.1.2
जीसीसी का निर्माण विन्यास:
$ bin/arm-none-eabi-gcc -v --version
Using built-in specs.
COLLECT_GCC=bin/arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/Users/ardnew/cross/libexec/gcc/arm-none-eabi/4.8.1/lto-wrapper
arm-none-eabi-gcc (GCC) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Target: arm-none-eabi
Configured with: /Users/ardnew/cross/src/gcc-4.8.1/configure --target=arm-none-eabi --prefix=/Users/ardnew/cross --with-cpu=cortex-a8 --enable-languages=c,ada --disable-multilib --enable-interwork --disable-threads --disable-shared --disable-nls --disable-lto --disable-libssp --disable-decimal-float --disable-libgomp --disable-libmudflap
Thread model: single
gcc version 4.8.1 (GCC)
COLLECT_GCC_OPTIONS='-v' '--version' '-mcpu=cortex-a8'
/Users/ardnew/cross/libexec/gcc/arm-none-eabi/4.8.1/cc1 -quiet -v -D__USES_INITFINI__ help-dummy -quiet -dumpbase help-dummy -mcpu=cortex-a8 -auxbase help-dummy -version --version -o /var/folders/4c/y_sll7bj6b9bt15389wr66_80000gn/T//ccrSSKFx.s
GNU C (GCC) version 4.8.1 (arm-none-eabi)
compiled by GNU C version 4.8.1, GMP version 5.1.3, MPFR version 3.1.2, MPC version 1.0.2
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
COLLECT_GCC_OPTIONS='-v' '--version' '-mcpu=cortex-a8'
/Users/ardnew/cross/lib/gcc/arm-none-eabi/4.8.1/../../../../arm-none-eabi/bin/as -mcpu=cortex-a8 -meabi=5 --version -o /var/folders/4c/y_sll7bj6b9bt15389wr66_80000gn/T//ccZYvQLp.o /var/folders/4c/y_sll7bj6b9bt15389wr66_80000gn/T//ccrSSKFx.s
GNU assembler (GNU Binutils) 2.24
Copyright 2013 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or later.
This program has absolutely no warranty.
This assembler was configured for a target of `arm-none-eabi'.
COMPILER_PATH=/Users/ardnew/cross/libexec/gcc/arm-none-eabi/4.8.1/:/Users/ardnew/cross/libexec/gcc/arm-none-eabi/4.8.1/:/Users/ardnew/cross/libexec/gcc/arm-none-eabi/:/Users/ardnew/cross/lib/gcc/arm-none-eabi/4.8.1/:/Users/ardnew/cross/lib/gcc/arm-none-eabi/:/Users/ardnew/cross/lib/gcc/arm-none-eabi/4.8.1/../../../../arm-none-eabi/bin/
LIBRARY_PATH=/Users/ardnew/cross/lib/gcc/arm-none-eabi/4.8.1/:/Users/ardnew/cross/lib/gcc/arm-none-eabi/4.8.1/../../../../arm-none-eabi/lib/
COLLECT_GCC_OPTIONS='-v' '--version' '-mcpu=cortex-a8'
/Users/ardnew/cross/libexec/gcc/arm-none-eabi/4.8.1/collect2 -X --version /Users/ardnew/cross/lib/gcc/arm-none-eabi/4.8.1/crti.o /Users/ardnew/cross/lib/gcc/arm-none-eabi/4.8.1/crtbegin.o crt0.o -L/Users/ardnew/cross/lib/gcc/arm-none-eabi/4.8.1 -L/Users/ardnew/cross/lib/gcc/arm-none-eabi/4.8.1/../../../../arm-none-eabi/lib /var/folders/4c/y_sll7bj6b9bt15389wr66_80000gn/T//ccZYvQLp.o --start-group -lgcc -lc --end-group /Users/ardnew/cross/lib/gcc/arm-none-eabi/4.8.1/crtend.o /Users/ardnew/cross/lib/gcc/arm-none-eabi/4.8.1/crtn.o
collect2 version 4.8.1
/Users/ardnew/cross/lib/gcc/arm-none-eabi/4.8.1/../../../../arm-none-eabi/bin/ld -X --version /Users/ardnew/cross/lib/gcc/arm-none-eabi/4.8.1/crti.o /Users/ardnew/cross/lib/gcc/arm-none-eabi/4.8.1/crtbegin.o crt0.o -L/Users/ardnew/cross/lib/gcc/arm-none-eabi/4.8.1 -L/Users/ardnew/cross/lib/gcc/arm-none-eabi/4.8.1/../../../../arm-none-eabi/lib /var/folders/4c/y_sll7bj6b9bt15389wr66_80000gn/T//ccZYvQLp.o --start-group -lgcc -lc --end-group /Users/ardnew/cross/lib/gcc/arm-none-eabi/4.8.1/crtend.o /Users/ardnew/cross/lib/gcc/arm-none-eabi/4.8.1/crtn.o
GNU ld (GNU Binutils) 2.24
Copyright 2013 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.
टेस्ट प्रोग्राम को इसके निर्माण एआरएम बाइनरी सुनिश्चित करने के लिए:
$ cat told_unit1.adb told_unit1.ads
--
-- FILE: told_unit1.adb
--
with Ada.Text_IO;
use Ada.Text_IO;
package body told_unit1 is
procedure hello is
begin
put_line("hello, world");
end hello;
function double(x : in float) return float is
begin
return x + x;
end double;
end told_unit1;
--
-- FILE: told_unit1.ads
--
package told_unit1 is
procedure hello;
pragma Export
(
convention => C,
entity => hello,
external_name => "ada_hello"
);
function double(x : in float) return float;
pragma Export
(
convention => C,
entity => double,
external_name => "ada_double"
);
end told_unit1;
तो एडीए कोड संकलन और file
के साथ निरीक्षण:
$ arm-none-eabi-gcc -c told_unit1.adb
$ file told_unit1.o
told_unit1.o: ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), not stripped
और फिर जब मैं पुस्तकालय वस्तु फ़ाइल यह pukes बाध्य करने के लिए प्रयास करें:
$ arm-none-eabi-gnatbind -aO$ADA_OBJECT_PATH -Ltold told_unit1
error: "a-textio.ali" not found, "a-textio.adb" must be compiled
मेरी जीसीसी के लिए वापस जा रहे हैं लॉग बनाएं, मैंने पाया कि libada (जो मुझे विश्वास है कि जीएनएटी का हिस्सा है) कभी नहीं बनाया गया था। जब मैं जीसीसी का निर्माण निर्देशिका से make all-target-libada
चलाने का प्रयास, यह अंततः मुझसे कहता है:
Configuring in arm-none-eabi/libada
configure: loading cache ./config.cache
checking build system type... x86_64-apple-darwin13.1.0
checking host system type... arm-none-eabi
checking target system type... arm-none-eabi
checking for arm-none-eabi-gcc... /Users/ardnew/cross/src/gcc-4.8.1-obj/./gcc/xgcc -B/Users/ardnew/cross/src/gcc-4.8.1-obj/./gcc/ -B/Users/ardnew/cross/arm-none-eabi/bin/ -B/Users/ardnew/cross/arm-none-eabi/lib/ -isystem /Users/ardnew/cross/arm-none-eabi/include -isystem /Users/ardnew/cross/arm-none-eabi/sys-include
checking for C compiler default output file name...
configure: error: in `/Users/ardnew/cross/src/gcc-4.8.1-obj/arm-none-eabi/libada':
configure: error: C compiler cannot create executables
See `config.log' for more details.
make: *** [configure-target-libada] Error 1
और इसलिए मैं का निरीक्षण है कि अपने की चर्चा करते हुए config.log और निम्नलिखित को खोजने जाना:
configure:2351: $? = 0
configure:2340: /Users/ardnew/cross/src/gcc-4.8.1-obj/./gcc/xgcc -B/Users/ardnew/cross/src/gcc-4.8.1-obj/./gcc/ -B/Users/ardnew/cross/arm-none-eabi/bin/ -B/Users/ardnew/cross/arm-none-eabi/lib/ -isystem /Users/ardnew/cross/arm-none-eabi/include -isystem /Users/ardnew/cross/arm-none-eabi/sys-include -v >&5
COLLECT_LTO_WRAPPER=/Users/ardnew/cross/src/gcc-4.8.1-obj/./gcc/lto-wrapper
Target: arm-none-eabi
Configured with: /Users/ardnew/cross/src/gcc-4.8.1/configure --target=arm-none-eabi --prefix=/Users/ardnew/cross --with-cpu=cortex-a8 --enable-languages=c,ada --disable-multilib --enable-interwork --disable-threads --disable-shared --disable-nls --disable-lto --disable-libssp --disable-decimal-float --disable-libgomp --disable-libmudflap
configure:2351: $? = 0
xgcc: error: unrecognized command line option '-qversion'
xgcc: fatal error: no input files
compilation terminated.
configure:2351: $? = 1
configure:2371: checking for C compiler default output file name
configure:2393: /Users/ardnew/cross/src/gcc-4.8.1-obj/./gcc/xgcc -B/Users/ardnew/cross/src/gcc-4.8.1-obj/./gcc/ -B/Users/ardnew/cross/arm-none-eabi/bin/ -B/Users/ardnew/cross/arm-none-eabi/lib/ -isystem /Users/ardnew/cross/arm-none-eabi/include -isystem /Users/ardnew/cross/arm-none-eabi/sys-include -g -O2 conftest.c >&5
/Users/ardnew/cross/arm-none-eabi/bin/ld: cannot find crt0.o: No such file or directory
/Users/ardnew/cross/arm-none-eabi/bin/ld: cannot find -lg
/Users/ardnew/cross/arm-none-eabi/bin/ld: cannot find -lc
collect2: error: ld returned 1 exit status
configure:2397: $? = 1
configure:2434: result:
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME ""
| #define PACKAGE_TARNAME ""
| #define PACKAGE_VERSION ""
| #define PACKAGE_STRING ""
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| /* end confdefs.h. */
|
| int
| main()
| {
|
| ;
| return 0;
| }
configure:2440: error: in `/Users/ardnew/cross/src/gcc-4.8.1-obj/arm-none-eabi/libada':
configure:2444: error: C compiler cannot create executables
See `config.log' for more details.
तो पर इस बिंदु पर मैं अपने सिर पर रास्ता हूं और वास्तव में यह सुनिश्चित नहीं करता कि आगे क्या करना है। ऐसा लगता है कि मैं एआरएम के लिए सी रनटाइम लाइब्रेरी खो रहा हूं?
एआरएम लक्ष्यों के लिए जीएनएटी/लीबिया को कॉन्फ़िगर करने में कोई भी मदद महान होगी।
वैकल्पिक रूप से- क्या एक्सकोड आईओएस प्रोजेक्ट से एडा पुस्तकालयों के खिलाफ लिंक करने का एक आसान तरीका है?
आप की जाँच करनी चाहिए आप 'हाथ-नन-eabi' पार संकलक ELF या माचो binaries पैदा कर रहा है कि क्या - बाद दोनों MacOSX के लिए आवश्यक है, लेकिन मैं दृढ़ता से संदेह है कि विन्यास ELF, जो आप उपयोग नहीं कर सकते का उत्पादन करेगा। यह एक बड़ी समस्या नहीं है, लेकिन आपको स्वयं को मैक-ओ समर्थन के साथ एक क्रॉस-कंपाइलिंग जीसीसी और बिन-यूटिल बनाने की आवश्यकता हो सकती है। – marko
'हाथ-नन-EABI-gcc' @marko ELF डिब्बे का निर्माण किया जाता है (पाठ की दीवार के लिए खेद है, लेकिन कोड ब्लॉक मैं ऊपर से 4 चिपकाया जाँच), और आप एक असली पर लक्ष्य आईओएस कह रहे हैं, भौतिक आईपैड मैक-ओ प्रारूप की उम्मीद कर रहा है और ईएलएफ नहीं? अगर मैं प्रारूप बदलता हूं, तो मेरा मानना है कि मेरी वर्तमान समस्या अभी भी मौजूद होगी हालांकि – ardnew
हां। ईएलएफ ऑब्जेक्ट फाइलें मैकोज़क्स या आईओएस पर आपके लिए उपयोग नहीं करती हैं क्योंकि वे केवल मैक-ओ ऑब्जेक्ट फाइलों और साझा पुस्तकालयों का उपयोग करते हैं। वह एआरएम एबीआई भी कमजोर है। मैं उम्मीद करता हूं कि आईओएस पर एआरएम के लिए लक्षित जीसीसी के पास एक हाथ 'आर्म-सेब-डार्विन-' उपसर्ग या कुछ समान होगा। आपका त्रुटियों अच्छी तरह से निष्पादन योग्य फ़ाइल स्वरूप मेल नहीं खाता से संबंधित हो सकता। – marko