2

昨日、ソースからビルドして gcc をバージョン 8.4.0 から 9.3.0 にアップグレードしようとしました。これは、Ubuntu の apt リポジトリからインストールできる最新バージョンが 8.4.0 であるためです。

ビルドとインストールのプロセスはすべて問題なく、gcc-9.3.0 でしか実装されていない機能を含めても、どんな C++ コードでもコンパイルできます。しかし、コードで C++ STL を使用した場合、プログラムを実行できません。

ldd my-program」によって、問題が見つかりました。gcc-9.3.0 はファイルlibstdc++.so.6.0.28/usr/lib64/にインストールしたようですが、公式バージョン (gcc-8.4.0)のファイル( libstdc++.so.6.0.25 ) は存在します。 /usr/lib/x86_64-linux-gnu/にあるため、ld.so は my-program のライブラリをロードできません。「/usr/lib64」をLD_LIBRARY_PATH環境変数に追加すると、機能します。

/usr/lib64 が Kubuntu-18.04.4LTS の ld.so のデフォルトの検索場所の 1 つではないのは奇妙ですか、それとも間違っていますか?

LD_LIBRARY_PATH を使用するか、/etc/ld.so.conf にパスを追加することで解決できることはわかっていますが、/usr/lib64 がデフォルトのパスではないことに疑問を感じています。

さらに、ビルド プロセスを確認しました。

ターゲットを Ubuntu の apt リポジトリにある公式のターゲットにできるだけ近づけるために、構成する前に、" echo | gcc -v -x c -E -" を使用して公式の gcc-8.4.0 ターゲットのすべてのビルド オプションを取得し、それらを自分自身に適用しました。次のようにビルド:

~/projects/gcc-9.3.0/configure \
--build=x86_64-linux-gnu \
--disable-libgcj \
--disable-libstdcxx-debug \
--disable-libunwind-exceptions \
--disable-multilib \
--disable-vtable-verify \
--enable-__cxa_atexit \
--enable-bootstrap \
--enable-checking=release \
--enable-clocale=gnu \
--enable-default-pie \
--enable-gnu-indirect-function \
--enable-gnu-unique-object \
--enable-initfini-array \
--enable-languages=c,c++ \
--enable-libmpx \
--enable-libstdcxx-time=yes \
--enable-linker-build-id \
--enable-nls \
--enable-offload-targets=nvptx-none \
--enable-plugin \
--enable-shared \
--enable-threads=posix \
--host=x86_64-linux-gnu \
--libdir=/usr/lib \
--libexecdir=/usr/lib \
--prefix=/usr \
--program-suffix=-9.3 \
--target=x86_64-linux-gnu \
--with-abi=m64 \
--with-bugurl=file:///usr/share/doc/gcc-8/README.Bugs \
--with-default-libstdcxx-abi=new \
--with-linker-hash-style=gnu \
--with-pkgversion='Ubuntu 9.3.0-6ubuntu1~18.04.4' \
--with-system-zlib \
--with-target-system-zlib \
--with-tune=generic \
--without-cuda-driver \
--without-included-gettext

オプション「--libdir=/usr/lib」は、ターゲットライブラリをインストールするパスを明示的に設定することに注意してください。 しかし、ファイル libstdc++.so.6.0.28 はまだ /usr/lib64 にインストールされていました。

私が見逃したものは何ですか?

どんな助けやヒントも感謝されます!

4

1 に答える 1