数時間のグーグルの後、私はあきらめて専門家に尋ねることにしました。私の64 Ubuntu 11.10で32ビットアプリケーション(興味がある人はxgap)を構築しようとしています。メイクファイルにCFLAGS = -m32とLDFLAGS = -L / usr / lib32を追加しました。オブジェクトは32ビットの罰金に組み込まれています。最後のステップは、Xウィンドウのすべてのオブジェクトとライブラリをこの実行可能ファイルにリンクすることです--xgap。どういうわけか、それは私にこのエラーを与え続けます:
gcc -o xgap xcmds.o utils.o gapgraph.o gaptext.o pty.o popdial.o xgap.o selfile.o -L/usr/lib32 -lXaw -lXmu -lXt -lXext -lX11 -lSM -lICE
/usr/bin/ld: skipping incompatible /usr/lib32/libXmu.so when searching for -lXmu
...
/usr/bin/ld: i386 architecture of input file `xcmds.o' is incompatible with i386:x86-64 output
...
ia32-libsとmutilibサポートをインストールしました。リンカにi386出力を生成させるだけでよいと思います。上記のように、gccコマンドに-melf_i386と-oformat elf32-i386の 2つのldフラグを追加しようとしました。しかし、gccは/ usr / lib32内の32ビットライブラリを検索しなくなります。これらのフラグを一定の順序で配置する必要があるのだろうか?
アイデアと助けてくれてありがとう!
編集:最後のgccコマンド(私が信じているリンク段階)に-m32フラグを追加すると、たとえ-L / usr / lib32フラグが設定されていても、gccは/ usr / lib32を検索しません(本当に奇妙な...)そして次のエラーを生成します:
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../libXaw.so when searching for -lXaw
/usr/bin/ld: skipping incompatible /usr/lib/libXaw.so when searching for -lXaw
/usr/bin/ld: cannot find -lXaw
collect2: ld returned 1 exit status
誰もこれがなぜ起こるのか考えていますか?自動ツールを使用して構成と作成を行っています。これらのスクリプトファイルを変更するのが得意です。
EIDT:問題を解決しました。gccは静的ライブラリアーカイブを期待していたと思います。http://ubuntuforums.org/showthread.php?t=474790のgetlibsスクリプトを使用して、リンクに必要なすべての.aアーカイブをダウンロードしました。その後、gccが機能しました。私が思うにgccがで検索をしたの/ usr / lib32がディレクトリが、見つけられませんでし た.aそうである標準ディレクトリで検索するように行ったアーカイブをは/ usr / libにそれは互換性のない見つけ、* .soのファイルを。
しかし、質問は次のとおりです。パッケージia32-libsの/ usr / lib32 /にある* .soファイルには、リンクに必要なライブラリが実際にはありませんか?/ usr / lib32 /内のこれらのファイルは何に使用されますか?