0

Sun Studio 10 を搭載した Solaris 10 Sparc 64 ビット マシンで誰かが実行できるように、プログラムをコンパイルしてリンクする必要があります。

Solaris 10 Sparc 64 ビットのマシンを使用していますが、Oracle サイトでダウンロードできる Sun Studio 11 および 12 しか見つかりませんでした。古いため、Sun Studio 10 はダウンロードできないようです。

私の質問は、Sun Studio 10 でシームレスに実行できるように、Studio 12 を使用して (一連のフラグ設定を使用して) プログラムをコンパイルする方法はありますか?

ご指導ありがとうございました

4

1 に答える 1

3

1つのバージョンのStudio(11や12.xなど)を使用してプログラムをビルドする場合、以前のバージョンのStudioのライブラリにリンクすることは期待できません。使用しているプログラミング言語はわかりませんが、この問題はFortranとC++で最も一般的です。

たとえば、問題を回避するための手順を実行しない限り(以下を参照)、STLportまたはIntervalライブラリを使用するC ++プログラムは、実行時にコンパイラとともにインストールされた共有ライブラリにリンクしようとします。プログラムがStudio11または12.xでビルドされている場合、Studio10ライブラリとのリンクはうまく機能しません。

ただし、プログラムが/ usr / libのデフォルトのランタイムライブラリにのみリンクしている場合、Studioがターゲットシステムにインストールされているかどうか、またはどのバージョンがインストールされているかは関係ありません。これが当てはまるかどうかは、プログラムを構築したシステムのプログラムで「ldd」を実行することで確認できます。

% ldd myprog

出力には、プログラムが使用するすべての共有ライブラリと、それらがどこから来たのかが表示されます。コンパイラのインストール領域にライブラリがない場合は、問題はありません。

他の唯一の問題はSolarisの互換性です。SolarisバージョンNでプログラムをビルドする場合、Solaris N + 1以降でプログラムを実行することは期待できますが、SolarisN-1以前では実行できません。その理由は、Solarisは古いインターフェイスを保持しますが、新しいインターフェイスを追加するためです。プログラムは、古いバージョンのSolarisには存在しないSolarisインターフェイスに依存している可能性があります。特にSolaris10の場合、後のアップデートでは、以前のアップデートにはない新しい機能とインターフェイスが導入されました。たとえば、アップデート10でプログラムをビルドした場合、元のSolaris10では実行されない可能性があります。

さらに、ビルドシステムに新しいバージョンのC ++ランタイムライブラリ(パッケージSUNWlibC)のパッチが適用されている場合、ターゲットシステムには同じパッチまたはそれ以降のパッチが適用されている必要があります。コマンドを実行すると、パッチのバージョンを確認できます

% showrev -p | grep SUNWlibC

Studioに付属しているライブラリについての私の最初の議論に戻って、この論文

http://www.oracle.com/technetwork/articles/servers-storage-dev/linkinglibraries-396782.html

コンパイラのインストールに依存しないように、配布用のプログラムを構築する際のベストプラクティスについて説明します。

Steve Clamage OracleC++コンパイラチーム

于 2012-10-19T17:25:16.597 に答える