2014-08-27 9 views
0

GNU ARM Toolchain을 사용하여 Cortex M4의 정적 라이브러리로 libiconv를 빌드하려고하는데 프로세스가 거의 성공적으로 수행 된 것 같습니다.ARM Cortex M 용 libiconv를 크로스 컴파일하는 방법은 무엇입니까? 생성 된 파일의 구문 오류

나는 이렇게 libiconv 구성 : "호스트 삼중로 시작하지 사용하여 크로스 도구 경고"(하지만 발견하고 사용

./configure --build=x86_64-linux-gnu --host=arm-none-eabi --prefix=/home/josaphat/Downloads/libiconv-1.14/build_dir CFLAGS="-nostdlib -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mthumb -mfloat-abi=hard" --enable-static 

구성은 내가 아닌 다른를 식별 할 수있는 경고 또는 오류가 표시되지 않습니다 정확한 컴파일러만으로도 나는 이것을 안전하게 무시할 수있다.) sigprogmask.c를 컴파일 할 때

오류는 오는 :

[... 싹둑 ...]

arm-none-eabi-gcc -DHAVE_CONFIG_H -DEXEEXT=\"\" -I. -I.. -I../lib -I../intl -DDEPENDS_ON_LIBICONV=1 -DDEPENDS_ON_LIBINTL=1 -nostdlib -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mthumb -mfloat-abi=hard -c sigprocmask.c 
In file included from /usr/local/gcc-arm-none-eabi-4_8-2014q2/arm-none-eabi/include/signal.h:5:0, 
       from ./signal.h:52, 
       from sigprocmask.c:44: 
./signal.h:490:1: error: expected identifier or '(' before 'const' 
_GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig) 
^ 
./signal.h:490:1: error: expected ')' before '&' token 
_GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig) 
^ 
./signal.h:490:1: error: expected ')' before '!=' token 
_GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig) 
^ 
./signal.h:503:1: error: expected ')' before '*' token 
_GL_FUNCDECL_SYS (sigemptyset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); 
^ 
./signal.h:503:1: error: expected ')' before '=' token 
_GL_FUNCDECL_SYS (sigemptyset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); 
^ 
./signal.h:515:1: error: expected ')' before '*' token 
_GL_FUNCDECL_SYS (sigaddset, int, (sigset_t *set, int sig) 
^ 
./signal.h:515:1: error: expected ')' before '|=' token 
_GL_FUNCDECL_SYS (sigaddset, int, (sigset_t *set, int sig) 
^ 
./signal.h:528:1: error: expected ')' before '*' token 
_GL_FUNCDECL_SYS (sigdelset, int, (sigset_t *set, int sig) 
^ 
./signal.h:528:1: error: expected ')' before '&=' token 
_GL_FUNCDECL_SYS (sigdelset, int, (sigset_t *set, int sig) 
^ 
./signal.h:541:1: error: expected ')' before '*' token 
_GL_FUNCDECL_SYS (sigfillset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); 
^ 
./signal.h:541:1: error: expected ')' before '=' token 
_GL_FUNCDECL_SYS (sigfillset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); 
^ 
sigprocmask.c:87:14: error: expected identifier or '(' before 'const' 
sigismember (const sigset_t *set, int sig) 
      ^
sigprocmask.c:87:1: error: expected ')' before '&' token 
sigismember (const sigset_t *set, int sig) 
^ 
sigprocmask.c:87:1: error: expected ')' before '!=' token 
sigismember (const sigset_t *set, int sig) 
^ 
sigprocmask.c:103:23: error: expected ')' before '*' token 
sigemptyset (sigset_t *set) 
        ^
sigprocmask.c:103:1: error: expected ')' before '=' token 
sigemptyset (sigset_t *set) 
^ 
sigprocmask.c:110:21: error: expected ')' before '*' token 
sigaddset (sigset_t *set, int sig) 
        ^
sigprocmask.c:110:1: error: expected ')' before '|=' token 
sigaddset (sigset_t *set, int sig) 
^ 
sigprocmask.c:130:21: error: expected ')' before '*' token 
sigdelset (sigset_t *set, int sig) 
        ^
sigprocmask.c:130:1: error: expected ')' before '&=' token 
sigdelset (sigset_t *set, int sig) 
^ 
sigprocmask.c:151:22: error: expected ')' before '*' token 
sigfillset (sigset_t *set) 
        ^
sigprocmask.c:151:1: error: expected ')' before '=' token 
sigfillset (sigset_t *set) 
^ 
make[2]: *** [sigprocmask.o] Error 1 

[... 등 ...] 나는에있어

여기 손실. "nostdlib"플래그를 생략했지만 컴파일러가 _exit을 찾을 수 없기 때문에 configure 단계가 실패합니다. (필자는 OS가없는 타겟을 구축하고 있습니다.) 그럼 내가 뭘 놓치고 있니? libiconv는 -nostdlib이 제거하는 것에 의존합니까? 그렇다면 어떻게 이것이 사실상 구문 오류라고 설명합니까?

그래서 내 궁금한 점이있다. 운영 체제가없는 시스템에서 libiconv를 빌드 할 수 있습니까? 그렇다면 어떻게이 현재의 장애물을 극복 할 수 있습니까?

+0

왜 컴파일 할 때 빌드 옵션이 x86-64를 사용하고 있습니까? 매크로 정의와 관련이 있다고 생각합니다. 컴파일 옵션을 올바르게 설정해야합니다. – HuStmpHrrr

+0

저는 Cortex M4 용 x86_64 우분투 컴퓨터에 구축하고 있기 때문에. 그것이 매크로 정의와 관련이 있습니다. 왜냐하면 이것이 실패한 부분이기 때문입니다. "올바르게"무엇을 의미하는지 더 구체적으로 설명해 주실 수 있습니까? – josaphatv

+0

은 빌드가 의미하는 것입니까? 어쩌면 당신은 문서를 읽어야하지만 내 이해에서는 빌드 옵션이 타겟 아키텍처 여야합니다. 설명서가 단계별로 설명하는 방법을 알려주는지 궁금합니다. – HuStmpHrrr

답변

-1

같은 문제가 발생했습니다. 나는 구성에 대한 깨끗한 방법을 찾을

1)이 scrlib/signals.h을 편집하고 오류 0-> 1 등하기 전에 정의를 변화와 라이브러리 컴파일 관리되지 않은 :

/* Test whether a given signal is contained in a signal set. */ 
# if 1 
/* This function is defined as a macro on MacOS X. */ 

을 대부분 signal.h에서 이러한 부분을 주석 처리하는 것이 효과적 일 것입니다. scrlib/sigprocmask.c

이 명령 행 도구에 필요한의 기능을 주석

2), 도서관이없이 OK 컴파일합니다.