web-dev-qa-db-ja.com

GCC / G ++でのクロスコンパイルの問題

CIサーバー( http://ci.berboe.co.uk )でC++アプリケーションをコンパイルするためにgccを使用しています。コンパイルされるvpsには必要なx86-64アーキテクチャがあるためクロスコンパイルして、コンパイルされたプログラムをx86コンピューターで動作させる。

Gcc-multilibとg ++-multilib、および他の場所で提案されたいくつかの他のパッケージをインストールしましたが、コンパイルしようとするとエラーが発生します。それは:

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++
collect2: ld returned 1 exit status

完全なログはこちらから入手できます: http://ci.berboe.co.uk/job/MCServer%20Linux-x86/11/console

この問題を解決するための助けをいただければ幸いです。

編集:

/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crt1.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crti.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/crtbegin.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/crtend.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crtn.o' is incompatible with i386 output
/usr/bin/ld: final link failed: Invalid operation

前の問題を修正した後、これを取得します。

6
hifkanotiks
  • 32ビットライブラリをインストールします(一部のディストリビューションではia32-libs、これに移動: http://wiki.debian.org/Multiarch/HOWTO 他の人、あなたがそれを求めた場合、その詳細。
  • 必ずi386ライブラリパスをLD_LIBRARY_PATH envに追加してください。変数。 (ほぼ間違いなくexport LD_LIBRARY_PATH = ${LD_LIBRARY_PATH}:/lib32:/usr/lib32:/usr/lib/i386-linux-gnuなど)。
  • 必ずi386インクルードパスをLD_INCLUDE_PATH環境変数に追加してください。

以下を使用して、これらのライブラリを(もちろんインストールされたら)お気軽に探してください。

find / -iname "*libstdc++.so*" 2> /dev/null

たとえば、libstdc++.soライブラリの場合。 findは、LD_LIBRARY_PATH環境変数に追加できるパスを報告する必要があります。

3
user129005

I386 chrootを作成した方が良いでしょう。 mk-sbuild(ubuntu-dev-tools内)およびschrootは、これらの管理を非常に簡単にします。

1
Colin Watson

mightが機能する2つのオプションがあります。

  1. ia32-libsを実行してSudo apt-get install ia32-libsパッケージをインストールします。これは単なる予測であり、動作する場合と動作しない場合があります。
  2. 別の解決策は、32ビットLinuxを仮想マシンにインストールしてコードをコンパイルすることです。

このリンクが役立つ場合があります:- http://en.sfml-dev.org/forums/index.php?topic=6034.

1
green