2011-02-06 14 views
0

Solaris 32ビットシステム用にgccバージョン3.4.3を使用して共有オブジェクト(.so)を作成しようとしています。私はsolaris用の共有オブジェクトを作成するために必要なフラグを探していました。いくつかの投稿では、 "-shared"フラグが使用されていないことがわかりました。代わりに "-G"フラグが使用されます。私は "-G"フラグは "-g"と同じだが、 "-G"は "-shared"と同じような印象を受けた。私は正しいですか?Solaris 32ビット - gccを使用して共有オブジェクトを構築

SLES10 x86_64システムでは、.soをビルドするために "-shared"フラグが必要だったからです。

私は、次の試してみました

: - :-sharedフラグを使用するuser562374 @ から参考提案 アップデート1

gcc -m32 -shared -fPIC -o myapi.so.1 myapi.o $(LIB) 

-

LIB=-L/lib -L/usr/local/lib -L/usr/lib 
gcc -m32 -G -fPIC -o myapi.so.1 myapi.o $(LIB) 

は私がに上記変更する必要があります。

-sharedを使用して構築された共有オブジェクトが異なるコンパイラを使用してsolarisマシンにデプロイされ、「静的」にリンクされている場合、問題が発生しますか?私が「静的に」リンクされた.soと言うとき、私は共有オブジェクトが "dlsym"を使用するのではなくmakeファイルにリンクされていることを意味します。

+0

これは、「静的に」リンクされていることではありません。静的リンク手段は、共有オブジェクトを使用する代わりに、必要な.aライブラリのセクションをバイナリにコピーします。共有オブジェクトがdlopenで動作する場合は、通常の動的ライブラリリンク(「静的に」と誤って呼び出されたもの)で動作するはずです。 – alanc

答えて

1
-G num 
     Put global and static objects less than or equal to num 
     bytes into the small data or bss sections instead of the 
     ... 

それはGCCの場合-Gは、他の用途を持っているので、それは、-sharedです。

+0

@ user562374 ..素早い応答がありがとうございます。 -sharedを使用して構築された共有オブジェクトが異なるコンパイラを使用してsolarisマシンにデプロイされ、それが「静的」にリンクされている場合は、問題が発生するでしょうか?私が「静的に」裏打ちされた.soを言うとき、私は共有オブジェクトが "GetProcAddress"を使用するのではなくmakeファイルにリンクされていることを意味します。 – confused

関連する問題