別のシステムから再配置された gcc のバージョンを使用して何かをコンパイルしようとしています。これには問題があることはわかっていますが、それを機能させることができれば、私の人生はずっと楽になります. /opt/transfer/lib パスを $LIBRARY_PATH に追加しました。gcc はこれを (gcc -print-search-dirs から) 見ているようです。また、/opt/transfer/lib を /etc/ld.so.conf に追加しましたが、これが不要なソリューションを大いに望んでいます。私が実行すると問題が発生します:
g++ -g -m32 chopper.o -Llibs -lRTS -o Chopper /usr/bin/ld: /usr/lib/libstdc++.so.6 /usr/ の検索時に互換性のない /usr/lib/libstdc++.so.6 をスキップしますbin/ld: /usr/lib/libstdc++.so.6 が見つかりません /usr/bin/ld: /lib/libc.so.6 /usr/bin/ld の検索時に互換性のない /lib/libc.so.6 をスキップします: /lib/libc.so.6 が見つかりません /usr/bin/ld: /usr/lib/libc_nonshared.a の検索時に互換性のない /usr/lib/libc_nonshared.a をスキップしています /usr/bin/ld: /usr が見つかりません/lib/libc_nonshared.a collect2: ld が 1 つの終了ステータスを返しました
ld は /usr/lib/ を検索してからあきらめているようです。互換性があるはずの /opt/transfer/lib/libstdc++.so.6 ファイルがありますが、リンクされていません。「gcc -print-file-name=libstdc++.so.6」を実行すると、使用したいバージョンが見つかります。この場合、ld が /usr/lib の代わりに別のディレクトリを参照するように強制する方法はありますか?
編集
nneonneo が提案したように --sysroot オプションを使用してみましたが、それが機能するかどうかは完全にはわかりません。このオプションは私のバージョンの ld では利用できなかったので、 --with-sysroot=/opt/transfer と --with-build-sysroot=/opt/transfer を使用して再コンパイルしました。次に、実行すると、出力例として次のようになります。
/opt/transfer/bin/ld: /usr/lib/libstdc++.so.6 の検索時に互換性のない /usr/lib/libstdc++.so.6 をスキップします /opt/transfer/bin/ld: /usr/lib/ が見つかりませんlibstdc++.so.6 ld が 1 つの終了ステータスを返しました
この出力から、/opt/transfer/lib および /opt/transfer/usr/lib ディレクトリを検索していることは 100% 明確ではありません。なぜなら、正しい libstdc++.so.6 ファイルがそこにあるはずだとかなり確信しているからです。 . /opt/transfer からライブラリを削除すると、他のライブラリが見つからないという不平を言い始めるので、少なくとも部分的に動作していることは明らかですが、これらの他のライブラリはすべて、libstdc++ の場合は互換性のないライブラリをスキップしていると言っているのに、見つからないというだけです。 . libstdc++ が特別なケースとして扱われている可能性はありますか? これに対処する別のオプションはありますか?
編集 2
システムの /usr/libstdc++.so.6 をバックアップの場所に移動したところ、これを実行した後、互換性のないバージョンをスキップしているとは言わなくなりました。これは間違いなく、 --sysroot がここで期待していたことを実行していないことを意味します。誰かが持っている情報があれば、それ以上の情報をいただければ幸いです。