ツールセットTizenでzlibをビルドしようとしています。ビルドプロセスの一環として、ソースファイルはarm-linux-gnu-eabi-gcc -c
でオブジェクトにコンパイルされ、libtool
のアーカイブに統合されますが、libtool
には失敗し、.o
ファイルのそれぞれがis not an object file (not allowed in a library)
に渡されると不平を言います。オブジェクトファイルではなくELFを生成する静的ライブラリを作成できません
検査の結果、arm-linux-gnu-eabi-gcc -c
は、私が以前に見たことのないオブジェクトファイルではなくELFファイルを生成していることがわかりました。 -c -v
をコンパイラに渡すと、リンカが呼び出されていないことがわかります。なぜELF形式ですか?
arm-linux-gnu-eabi-gcc -S
の後にarm-linux-gnu-eabi-as
を呼び出してみると、アセンブラ自体がELFファイルを生成していることがわかりました。ここ
は、例えば次のとおり
% echo "int main(void) { return 0; }" > main.c
% arm-linux-gnueabi-gcc main.c -S -o main.s
% arm-linux-gnueabi-as main.s -o main.o
% file main.o
main.o: ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), not stripped
Tizenツールセットは、4つのコンパイラ({I386、アーム}及び{4.6,4.9})を含みます。 4人とも同じように行動します。
少なくともarm-linux-gnueabi-gcc
は、それに多くの.o
ELFファイルを渡すことができ、正しくリンクされているように見えます。しかし、私はまだlibtool
で静的ライブラリにアーカイブできるように、実際のオブジェクトファイルを生成する必要があります。助言がありますか? ELF
およびオブジェクトファイルは、排他的ではなく、およびLinux 上のすべてのオブジェクトファイルがELF
です:。
'libtool'に関する興味深い考え。私は自分で使ったことはありませんが、多くのプロジェクトはそれを使用しているようですが、私はここで 'zlib 'がそれを望んでいるので単純に使用しています。 –
私はオブジェクトが 'ELF'ファイルであることを知っていたと思いますが、ビルドプロセスでの吹き飛ばしで忘れてしまっていました。ご説明ありがとうございます。私は環境変数 'AR'が適切に定義されていることを保証することで問題を解決し、' libtool'はあなたが参照した非ネイティブ 'ar'を呼び出すことができました。 –