2013-12-02 5 views
0

Я пытаюсь создать инструментальную цепочку для Linux на OS X Mavericks. У меня есть GCC 4.8.1 двоичные файлы в /usr/local/gcc-4.8.1-for-linux64/bin/, и это команда используется для создания скрипта конфигурации для Binutils:Кросс-компиляция binutils на OS X

$ ../binutils-2.23.2/configure --target=arm-unknown-linux --prefix=$PREFIX --bindir=/usr/local/gcc-4.8.1-for-linux64/bin/

При запуске make all, я получил эту ошибку:

gcc -DHAVE_CONFIG_H -I. -I../../binutils-2.23.2/binutils -I. -I../../binutils-2.23.2/binutils -I../bfd -I../../binutils-2.23.2/binutils/../bfd -I../../binutils-2.23.2/binutils/../include -I./../intl -DLOCALEDIR="\"/usr/local/arm/share/locale\"" -Dbin_dummy_emulation=bin_vanilla_emulation -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Werror -g -O2 -MT readelf.o -MD -MP -MF .deps/readelf.Tpo -c -o readelf.o ../../binutils-2.23.2/binutils/readelf.c 
../../binutils-2.23.2/binutils/readelf.c:9046:20: error: adding 'int' to a 
     string does not append to the string [-Werror,-Wstring-plus-int] 
    fputs ("  " + n, stdout); 
      ~~~~~~~~^~~ 
../../binutils-2.23.2/binutils/readelf.c:9046:20: note: use array indexing to 
     silence this warning 
    fputs ("  " + n, stdout); 
       ^
      &  [ ] 
1 error generated. 
make[4]: *** [readelf.o] Error 1 
make[3]: *** [all-recursive] Error 1 
make[2]: *** [all] Error 2 
make[1]: *** [all-binutils] Error 2 
make: *** [all] Error 2 

В чем причина ошибки и как ее разрешить?


Update 1

Обновлено binutils 2,24, ошибка была изменена на

[ALL ] x86_64-build_apple-darwin13.0.0-gcc -D_RPC_THREAD_SAFE_ -D_GNU_SOURCE -DIS_IN_build -include /Volumes/CrosstoolCompile/arm-unknown-linux-gnueabi/build/build-libc-startfiles/config.h rpc_sample.c   -o /Volumes/CrosstoolCompile/arm-unknown-linux-gnueabi/build/build-libc-startfiles/sunrpc/cross-rpc_sample.o -MMD -MP -MF /Volumes/CrosstoolCompile/arm-unknown-linux-gnueabi/build/build-libc-startfiles/sunrpc/cross-rpc_sample.o.dt -MT /Volumes/CrosstoolCompile/arm-unknown-linux-gnueabi/build/build-libc-startfiles/sunrpc/cross-rpc_sample.o -c 
[ERROR] rpc_scan.c:40:10: fatal error: 'libintl.h' file not found 
[ALL ] #include <libintl.h> 
[ALL ]   ^
[ERROR] rpc_main.c:41:10: fatal error: 'libintl.h' file not found 
[ALL ] #include <libintl.h> 
[ALL ]   ^
[ALL ] In file included from rpc_clntout.c:34: 
[ERROR] ./rpc/types.h:73:9: error: unknown type name '__u_char'; did you mean 'u_char'? 
[ALL ] typedef __u_char u_char; 
[ALL ]   ^~~~~~~~ 
[ALL ]   u_char 
[ALL ] /usr/include/sys/types.h:84:24: note: 'u_char' declared here 
[ALL ] typedef unsigned char   u_char; 
[ALL ]         ^

Нет пользовательских флагов компилятора/линкера набор.

+0

Похоже, вы прошли мимо вашей проблемы с binutils и перешли к созданию eglibc. Я не могу вам помочь, так как никогда не использовал eglibc. ELLCC использует musl как стандартную библиотеку C. –

+0

Большое спасибо за ваш совет @RichardPennington. Просто чтобы уточнить, как вы можете сказать, что eglibc используется? Я выбрал glibc в crosstool-ng все время. – hanxue

+0

Это было предположение. Я googled rpc_scan.c, и это было упомянуто в связи с eglibc. Я легко мог ошибаться. Важно то, что вы прошли мимо binutils. –

ответ

1

Используйте более позднюю версию binutils. Такие вещи были исправлены в нескольких местах. Версия 2.24 только что вышла.

Исправление в более поздних версиях Binutils выглядит следующим образом:

fputs (&" "[n], stdout); 

Я предполагаю, что «GCC» на вашем Mac действительно «лязг». Мне пришлось обновить binutils в моем кланге на основе ELLCC cross tool project именно по этой причине, когда я начал компилировать ELLCC с собой.

+0

Я использую 'crosstool-ng', а последняя версия' binutil' равна 2.23 – hanxue

+0

Я проверил, что вы используете clang для компиляции. Это сообщение об ошибке clang. –

+0

Мои извинения, 'crosstool-ng' - это тот, который использует binutils 2.22. Обновлен binutils на моей машине до версии 2.24 с новыми ошибками выше. – hanxue

1

У меня есть ответ на Update 1:

Этих типов мешающих с теми, которые встроены в OSX. Вам необходимо применить этот патч к types.h в вашем источнике glibc.

--- types.h 2014-02-06 17:40:13.000000000 -0800 
+++ types_new.h 2014-02-06 17:38:22.000000000 -0800 
@@ -69,6 +69,9 @@ 
#include <sys/types.h> 
#endif 

+/* The system headers on Mac OS X conflict with these typedefs */ 
+#ifndef __APPLE__ 
+# error Error: should not be here if compiling under OSX. 
#ifndef __u_char_defined 
typedef __u_char u_char; 
typedef __u_short u_short; 
@@ -84,6 +87,7 @@ 
typedef __caddr_t caddr_t; 
# define __daddr_t_defined 
#endif 
+#endif 

#include <sys/time.h> 
#include <sys/param.h> 

Я использовал eglibc так здесь размещались мои типы:

/Volumes/{your case sensitive image}/.build/src/eglibc-2_17/sunrpc/rpc 

Более подробная информацию можно найти на моем blog post об этом всем процессе.

Cheers!

+0

Спасибо за указатель. Это сработало для меня! – BonsaiOak