お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2011-10-17 22:11:11

a-wada
メンバ
登録日: 2011-10-14

ubuntu 11.10 の C++ と リンカ の不具合?

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 では?

オフライン

 

#2 2011-10-17 23:40:16

hito
管理者
登録日: 2007-03-18

Re: ubuntu 11.10 の C++ と リンカ の不具合?

a-wada による投稿:

因みに件のリンクは /etc/ld.so.conf には含まれていません。ひょっとして BUG では?

バグではなく https://wiki.ubuntu.com/OneiricOcelot/ReleaseNotes/ja#GCC_4.6_Toolchain ではないでしょうか。

オフライン

 

#3 2011-10-18 01:54:15

a-wada
メンバ
登録日: 2011-10-14

Re: ubuntu 11.10 の C++ と リンカ の不具合?

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
  $

 システム領域のファイルをいじるので、少し オッカナイ のですが。

オフライン

 

#4 2011-10-18 14:42:39

a-wada
メンバ
登録日: 2011-10-14

Re: ubuntu 11.10 の C++ と リンカ の不具合?

追伸 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 を捜したのですが、見つかりません。
入手法を教えて頂けないでしょうか。

オフライン

 

#5 2011-10-18 16:23:29

a-wada
メンバ
登録日: 2011-10-14

Re: ubuntu 11.10 の C++ と リンカ の不具合?

再追伸 お騒がせしました。 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 をインストールしたら
最初からの問題が全て解決いたしました。
お騒がせして、申し訳ありませんでした。

オフライン

 

Board footer

Powered by FluxBB