2011-02-06 57 views
0

我想創建一個共享對象(.so)使用gcc版本3.4.3的Solaris 32位系統。我在Google上搜索需要爲solaris創建共享對象的標誌。在一些帖子中,我看到「共享」標誌未被使用。而是使用「-G」標誌。我有一個印象,「-G」標誌與「-g」相同,但似乎「-G」相當於「共享」。我對麼?Solaris 32位 - 使用gcc生成共享對象

原因是,在使用SLES10 x86_64系統時,需要使用「-shared」標誌來構建.so。

我嘗試以下操作: -

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

我需要改變以上: -

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

UPDATE1 有益的建議從 @ user562374使用-shared標誌。

如果使用-shared構建的共享對象部署在使用不同編譯器的solaris機器上,並且它是「靜態」鏈接的,是否會導致任何問題?當我說「靜態」鏈接.so時,我的意思是共享對象鏈接在make文件中,而不是使用「dlsym」。

+0

這不是什麼「靜態」鏈接手段。靜態鏈接手段將您需要的.a庫的各個部分複製到您的二進制文件中,而不是使用共享對象。如果共享對象與dlopen一起工作,它應該與一個正常的動態庫鏈接一起工作(你錯誤地稱之爲「靜態」)。 – alanc 2011-02-09 04:57:38

回答

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 
     ... 

如果它是海灣合作委員會,這是-shared,因爲-G有其他用途。

+0

@ user562374 ..感謝您的快速響應。如果使用-shared構建的共享對象部署在使用不同編譯器的solaris機器上,並且它是「靜態」鏈接的,是否會導致任何問題?當我說「靜態」排隊.so時,我的意思是共享對象鏈接在make文件中,而不是使用「GetProcAddress」。 – confused 2011-02-07 02:14:13