32 ビット プログラム コードを 64 ビット Ubuntu でコンパイルする (安全なパスを探しています)

32 ビット プログラム コードを 64 ビット Ubuntu でコンパイルする (安全なパスを探しています)

初めてラップトップに 64 ビット Ubuntu をインストールしました。現在、この OS で古い生物学 C++ プロジェクトをコンパイルする方法を探しています。新しくインストールした 32 ビット Ubuntu でプロジェクトをコンパイルするために必要なすべてのパッケージをインストールする .sh ファイルがあります。このファイルの内容は次のとおりです。

#!/bin/sh
apt-get update  # To get the latest package lists
apt-get install build-essential -y
apt-get install freeglut3-dev -y
apt-get install libsdl1.2-dev -y
apt-get install libsdl-image1.2-dev -y
apt-get install libsdl-mixer1.2-dev -y
apt-get install libopenscenegraph-dev -y

問題は、64 ビット Ubuntu にこれらのパッケージをインストールし、それに応じた Makefile を使用してプロジェクトをコンパイルしようとすると、次のエラー メッセージが表示されることです。

/usr/bin/ld: skipping incompatible ../../gllib-3.0b3/lib/libgll.a when searching for -lgll
/usr/bin/ld: cannot find -lgll

確認した後、libgll.aファイルがアーキテクチャ用にコンパイルされたことelf33-i386がわかりました。このファイルを 64 ビット アーキテクチャ用に再コンパイルする方法がわからないため、プロジェクト全体を 32 ビット アーキテクチャでコンパイルする必要があることはほぼ確実です。

簡単に言うと、今の私の質問は、このプロジェクトを 32 ビット アプリケーションとしてコンパイルし、64 ビット Ubuntu で実行するにはどうすればよいですか?

dpkg --add-architecture i386私の推測では、 コマンドを使用してから、 で目的のパッケージを手動でインストールする必要があると思いますapt-get install <package-name>:i386。 この方法の問題点は、パッケージをapt-get install libsdl1.2-dev:i386アンインストールする必要があることですbuild-essential

もちろん、最終的には も変更してmakefile、(および他の行?)-m32を追加する必要があります。これが必要な場合は、 を投稿して、私を支援できます。^^CXXFLAGSmakefile

最初に試したのは、以前の 32 ビット マシンと同じ方法ですべてを単純にインストールすることでした。

問題は、次のコンパイル エラーが発生することです: /usr/bin/ld: -lgll の検索時に互換性のない ../../gllib-3.0b3/lib/libgll.a をスキップします

これにより、おそらく私の子供 (5 歳) は 64 ビット アプリケーションとして実行するのに互換性がないのではないかと考えました。

あるいは、これをネイティブ 64 ビットとしてコンパイルできるかどうかご存知でしょうか? ^^

答え1

コンパイルしようとしているプログラムがソースコードではなく32ビットのバイナリライブラリを出荷するのは非常に奇妙ですが、どうやらこのライブラリはこここれをコンパイルすると、64 ビット libgll が取得され、このプログラムを 64 ビット用にコンパイルするために使用できるようになります。

関連情報