0

GNU ARM ツールチェーンを使用して Cortex M4 の静的ライブラリとして 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

Configure は、「WARNING: using cross tools not prefixed with host triplet」以外に識別できる警告やエラーを表示しません (ただし、適切なコンパイラを適切に検出して使用するため、これを安全に無視できると考えています)。

コンパイル時にエラーが発生し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 を見つけられないため、構成ステップが失敗します (OS なしでターゲット用にビルドしているので、意味があります)。それで、私は何が欠けていますか?libiconv は -nostdlib が削除するものに依存していますか? もしそうなら、これらが明らかに構文エラーであるという事実をどのように説明できますか?

したがって、私の質問は次のように要約できると思います: OS のないシステム用に libiconv を構築することさえ可能ですか? もしそうなら、どうすればこの現在の障害を克服できますか?

4

1 に答える 1