
Ubuntu日本語フォーラム

ログインしていません。
x86_64 の環境で作成したソフトの 32bits 環境での コンパイル、実行のテストを可能にしたく、C言語については 10.04 の時から出来ていたのが、C++では 11.04 で試みて失敗したので放置していたのですが、11.10 へのアップグレードの機会に再挑戦してみました。
$ export LD_LIBRARY_PATH=gmp32/gmp-5.0.2/.libs
$ g++ -m32 -O2 pi-pyo.cpp -I./gmp32/gmp-5.0.2 \
-L./gmp32/gmp-5.0.2/.libs -lgmp -o pyo
が次のエラーで終わります。
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/libstdc++.a when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++
collect2: ld はステータス 1 で終了しました
/etc/ld.so.conf の内容には /usr/lib32 も含まれ、そこには
$ ls -al /usr/lib32/libstdc*
lrwxrwxrwx 1 root root 19 2011-09-16 23:26 /usr/lib32/libstdc++.so.6 -> libstdc++.so.6.0.16
-rw-r--r-- 1 root root 930320 2011-10-17 14:46 /usr/lib32/libstdc++.so.6.0.16
で、必要と思われる so があるのに無視されているようです。そこで
/usr/lib/gcc/x86_64-linux-gnu/4.6.1/libstdc++.so の リンク先を別のファイルにしそこへ、
64 bits 或いは 32 bits 用の so をコピーすることで、目的を達成出来ました。
因みに件のリンクは /etc/ld.so.conf には含まれていません。ひょっとして BUG では?
オフライン
a-wada による投稿:
因みに件のリンクは /etc/ld.so.conf には含まれていません。ひょっとして BUG では?
バグではなく https://wiki.ubuntu.com/OneiricOcelot/ReleaseNotes/ja#GCC_4.6_Toolchain ではないでしょうか。
オフライン
hito による投稿:
バグではなく https://wiki.ubuntu.com/OneiricOcelot/ReleaseNotes/ja#GCC_4.6_Toolchain ではないでしょうか。
ご回答有り難うございます。ご指示の URL および その中で参照するよういわれている ・・・
https://wiki.ubuntu.com/NattyNarwhal/ToolchainTransition
を一瞥しました。問題がちょっと違うようですが、記述内容をヒントにコマンドラインに
次のように指定しても無視されるようで ・・・
$ g++ -m32 -O2 pi-pyo.cpp -I./gmp32/gmp-5.0.2 -Wl,-L/usr/lib32/libstdc++.so.6 \
-L./gmp32/gmp-5.0.2/.libs -lgmp -o pyo
同じエラーが出ます。
解決策は次 ・・・
$ export LD_LIBRARY_PATH=gmp32/gmp-5.0.2/.libs
$ ls -al /usr/lib/gcc/x86_64-linux-gnu/4.6.1/libstdc*
-rw-r--r-- 1 root root 2810932 2011-09-16 23:30 /usr/lib/gcc/x86_64-linux-gnu/4.6.1/libstdc++.a
lrwxrwxrwx 1 root root 56 2011-10-17 17:22 /usr/lib/gcc/x86_64-linux-gnu/4.6.1/libstdc++.so -> /usr/lib/gcc/x86_64-linux-gnu/4.6.1/libstdc++.so.64.32.x
-rw-r--r-- 1 root root 930320 2011-10-18 01:26 /usr/lib/gcc/x86_64-linux-gnu/4.6.1/libstdc++.so.64.32.x
$ cat ld-cpp32.sh
### for c++ 32bit
sudo cp -f /usr/lib32/libstdc++.so.6.0.16 /usr/lib/gcc/x86_64-linux-gnu/4.6.1/libstdc++.so.64.32.x
$ ld-cpp32.sh
[sudo] password for xxxx:
$ g++ -m32 -O2 pi-pyo.cpp -I./gmp32/gmp-5.0.2 -L./gmp32/gmp-5.0.2/.libs -lgmp -o pyo
$ pyo 100
N:= 100, prec:= 348 bits, P:= 7
3.
1415926535 8979323846 2643383279 5028841971 6939937510 5820974944 5923078164 0628620899 8628034825 3421170679
$
システム領域のファイルをいじるので、少し オッカナイ のですが。
オフライン
追伸 static link は出来ないようです。
$ export LD_LIBRARY_PATH=gmp32/gmp-5.0.2/.libs
$ ld-cpp32.sh
[sudo] password for xxxx:
$ g++ -m32 -static -O2 ../pai/pi-pyo.cpp -I./gmp32/gmp-5.0.2 -L./gmp32/gmp-5.0.2/.libs -lgmp -o pyo
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/libstdc++.a when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++
collect2: ld はステータス 1 で終了しました
32bits 用の gcc-4.6 libstdc++.a を捜したのですが、見つかりません。
入手法を教えて頂けないでしょうか。
オフライン
再追伸 お騒がせしました。 libstdc++.a でググって
http://ubuntuforums.org/showthread.php?t=1604953 で
私と同じことを尋ね Compiling 32 bit on 64 bit Ubuntu not working...
Try installing the "g++-multilib" package. と回答されたのが
見つかりました。 早速、パッケージマネージャで g++-4.6-multilib をインストールしたら
最初からの問題が全て解決いたしました。
お騒がせして、申し訳ありませんでした。
オフライン