4

GCC (Linux 上) を使用すると、共有ライブラリ内のシンボル可視性を簡単に制限できます。

Solaris (10) でのオプションは何ですか?

これらの GCC 機能は、Solaris 上の GCC (特に、Solaris リンカ/アセンブラを使用する GCC) でも動作しますか?

また、Solaris Studio C コンパイラ/リンカーは、シンボルの可視性を制御するための同様の属性/プラグマを提供しますか (つまり、デフォルトを非表示に設定し、シンボルを可視として明示的にマークするため)?

4

3 に答える 3

3

もう 1 つのオプションは、バージョン スクリプト ファイルを使用することです。これは、Linux、Solaris/GCC、Solaris/CC で動作します。

power3()関数だけがグローバルに利用できる共有ライブラリを考えてみましょう。これはpower2()、別の翻訳単位で定義されている which を使用し、power2()非表示にする必要があります。

次のバージョン スクリプトはこれを指定します。

$ cat vscript
{
  global: power3;
  local: *;
};

Linux と Solaris でのリンクには 1 つのファイルを使用できます。Linux/Solaris は同じ構文構造を理解しているようです。

ビルド コマンド

システム コンパイラ リンク コマンド
―――――――――――――――――――――――――――――――――――――――――――――――――― ―――――――――――――――――――――――――――――――――――――――――――
Linux Fedora 17 gcc-4.7.2 cc -shared -Wl,--version-script,vscript -fpic -o libpower.so ...
Solaris 10 gcc-4.8* gcc -shared -Wl,-M,vscript -fpic -o libpower.so ...
Solaris 10 cc 12.3 cc -shared -M vscript -fpic -o libpower.so ...

Solaris の GCC はld/ asfromを使用するように構成されていることに注意してください/usr/ccs/bin

于 2013-05-28T16:41:09.790 に答える