質問: Ubuntu 14.04 LTS (GNU/Linux 3.13.0-24-generic x86_64)環境にて 提供された共有ライブラリ(ITest.h libTest.so)を使用したプログラムをコンパイルする際に ``` /usr/bin/ld: skipping incompatible ./lib/libTest.so when searching for -lTest /usr/bin/ld: cannot find -lTest collect2: error: ld returned 1 exit status ``` このような感じで互換性がないと怒られます。 soは32bitのもののようで、環境が64bitであることから-m32を指定してコンパイル等を試しましたが どうしても同じエラーになります。 試しに自分で32bitのsoファイルを作成したところ、特に問題なくコンパイル/実行出来ました。 そこで提供されたライブラリ自体を疑い始めています。 試しにobjdump -aしたところ、 自前のso :elf32-i386 提供されたso:elf32-little このような結果となりました。 同一環境で32bitの共有ライブラリ(soファイル)を作成してファイルフォーマットが 異なるなんてことがあるものか、ここをまず詳しいかたにお尋ねしたいところです。 皆様のお知恵をおかしください。
回答: アセンブラコード ←→ エルフ形式 ←→ バイナリ と変換が可能です。 変換に必要なアプリをインストール ``` sudo apt-get install binutils-arm-none-eabi ``` 混乱の元となっているファイルをリネーム ``` mv ./lib/libTest.so ./lib/libTest.elf ``` 正規のso ファイルを作成 ``` arm-none-eabi-objcopy -O binary -I elf32-little ./lib/libTest.elf ./lib/libTest.so ```