2011-11-24 32 views
4

64ビットLinux、特にUbuntu 10.04で32ビットGTK +アプリケーションをコンパイルするときに問題があります。 64ビットGTK +アプリケーションをコンパイルすると問題なく動作しますが、すべてが32ビットアプリケーションをコンパイルするように設定されていますが、GTK +では動作しません。64ビットLinuxの32ビットGTK +アプリケーションのコンパイル

私は、単にgtk_initとgtk_mainであり、-m64としてコンパイルされます。私はそれを呼び出して、GCC 4.6.2でコンパイルしています:

gcc -m32 gtktest.c `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0` 

これらは私が取得エラーメッセージの2種類です:

/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.6.2/../../../../x86_64-unknown-linux-gnu/bin/ld: warning: libXext.so.6, needed by /usr/lib/../lib32/libgtk-x11-2.0.so, not found (try using -rpath or -rpath-link) 

/usr/lib/../lib32/libgdk-x11-2.0.so: undefined reference to `XmbSetWMProperties' 

を覚えておいてくださいこれらは唯一のエラーではなく、私は参照のために2つの特定の型を含めて、それを短くしています.GTK +ライブラリのスタック全体にエラーが発生します。

lib32フォルダに適切な32ビットバージョンのライブラリがあります。

誰かが以前にこの問題を抱えていて助けてくれました。これは本当に私の頭痛の原因となっています。

この問題の診断に役立つその他の情報があるかどうか尋ねてください。

注:私はia32-libsパッケージとgcc-multilibパッケージを持っています。 Ubuntu 10.04には別のia32-libs-gtkパッケージがありませんが、これらはia32-libsパッケージにラップされていると思います。それらはすべて私のシステム上にあります。

これはリンカの設定に問題があると思います。私は最近、新しいFree Pascalコンパイラと32ビットクロスコンパイラを構築しました。また、C99の新機能やC99サポートの一部を利用するために、GCCを4.6.2にアップグレードしました。私のシステムにはデフォルトの4.4.3 GCCがまだ存在します。問題が導入されたと思うのは、ClangとLLVMをツールチェーンとして実験していたため、新しいbinutilsをインストールしたときです。プラグインの機能を使いたいと思っていました。

64ビットプログラムをコンパイルするとすべてうまく動作しますが、新しいツールには全く問題はなく、32ビットプログラムをコンパイルできますが、明示的にリンクするときに問題があります。

現在のlibsのセットが適切で、Free Basicがインストールされていて、32ビットのコードしか出されていないことがわかりました。このアップグレードの前に32ビットのGTK +プログラムを作成できました。

このアップグレードでどのような設定が変更された可能性がありますか、それとも以前に起こったことがありますか?私は本当に新しいディストリビューションにアップグレードする必要がありますので、すべての新しいソフトウェアを利用できるようにするためには、すべてのパッケージをハックアップする必要がありますが、残念ながら、新しいカーネルにはコンピュータがスタンバイ状態から戻ってくるのを防ぐバグがあります。これは私が個人的な側面のプロジェクトのために使うラップトップなので、適切な電源管理は非常に重要です。私はそれが私のワークフローにはぴったりです。

答えて

0

ia32-libs-gtk & gcc-multilibパッケージをインストールする必要があります。既にコンパイルして、gcc -m32とリンクする必要があります。

0

12.04のGTKパッケージは、マルチarchで正しく動作していないようです。あなたは、次のシンボリックリンクを作成することによって、Ubuntuの12.04でこの問題を回避することができます

sudo ln -s /lib/i386-linux-gnu/libglib-2.0.so.0 /usr/lib32/libglib-2.0.so 
sudo ln -s /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so.0 /usr/lib32/libgtk-x11-2.0.so 
sudo ln -s /usr/lib/i386-linux-gnu/libgdk-x11-2.0.so.0 /usr/lib32/libgdk-x11-2.0.so 
sudo ln -s /usr/lib/i386-linux-gnu/libatk-1.0.so.0 /usr/lib32/libatk-1.0.so 
sudo ln -s /usr/lib/i386-linux-gnu/libpangox-1.0.so.0 /usr/lib32/libpangox-1.0.so 
sudo ln -s /usr/lib/i386-linux-gnu/libpango-1.0.so.0 /usr/lib32/libpango-1.0.so 
sudo ln -s /usr/lib/i386-linux-gnu/libgmodule-2.0.so.0 /usr/lib32/libgmodule-2.0.so 
sudo ln -s /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 /usr/lib32/libgobject-2.0.so 
sudo ln -s /usr/lib/i386-linux-gnu/libgdk_pixbuf-2.0.so.0 /usr/lib32/libgdk_pixbuf-2.0.so 

私はこのスレッドで答えを見つけました:http://www.blitzbasic.com/Community/posts.php?topic=101357

代わりに(おそらくより良い)、あなたは手つかずの基本システムを残して、あなたを更新することができますライブラリ名の代わりにファイル名で検索するリンク。次のようなもの:

gcc -m32 gtktest.c `pkg-config --cflags gtk+-2.0` -L/usr/lib/i386-linux-gnu -l:libgio-2.0.so.0 ... 

これはあまり良くありません。リンカーが見つけられないライブラリごとに-l:を追加する必要があります。ライブラリファイル名が変更された場合は、ビルドが中断されます。

0

環境変数PKG_CONFIG_PATHを使用して32ビットライブラリを検索するようにpkg-configに指示することができます。 Ubuntuのために 、RedHatのために

export PKG_CONFIG_PATH=/usr/lib32/pkgconfig:$PKG_CONFIG_PATH 

export PKG_CONFIG_PATH=/usr/lib/pkgconfig:$PKG_CONFIG_PATH 
関連する問題