2

Windows で MinGW コンパイラをセットアップしています。いくつかのサードパーティの*.aファイルがLinuxマシンから直接コピーされるプロジェクトのセットアップがあります。

単純な C プログラムをコンパイルしようとしましたが、ファイルのシンボル テーブルを調べると*.o、すべてのシンボル名の先頭にアンダースコアが付いています。

プログラム例:

int main(int argc, char** argv) 
{   
     int xyz=0; 
     printf("I am Here\n");
}

シンボル テーブル エントリ:

セクション:

Idx 名前 サイズ VMA LMA ファイル オフ Algn
  0 .テキスト 00000040 00000000 00000000 0000008c 2**2
                  CONTENTS、ALLOC、LOAD、RELOC、READONLY、CODE
  1 .データ 00000000 00000000 00000000 00000000 2**2
                  割り当て、ロード、データ
  2 .bss 00000000 00000000 00000000 00000000 2**2
                  割り当て

記号表:

[ 0](秒 -2)(fl 0x00)(ty 0)(scl 103) (nx 1) 0x00000000 abcd01.c
ファイル
[ 2](秒 1)(fl 0x00)(ty 20)(scl 2) (nx 0) 0x0000000b **_main**
[ 3](秒 1)(fl 0x00)(ty 0)(scl 3) (nx 1) 0x00000000 .text
AUX scnlen 0x3e nreloc 4 nlnno 0
[ 5](秒 2)(fl 0x00)(ty 0)(scl 3) (nx 1) 0x00000000 .data
AUX scnlen 0x0 nreloc 0 nlnno 0
[ 7](秒 3)(fl 0x00)(ty 0)(scl 3) (nx 1) 0x00000000 .bss
AUX scnlen 0x0 nreloc 0 nlnno 0
[ 9](秒 0)(fl 0x00)(ty 20)(scl 2) (nx 1) 0x00000000 ___main
AUX tagndx 0 ttlsiz 0x0 lnnos 0 次の 0
[ 11](秒 0)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 __alloca
[ 12](秒 0)(fl 0x00)(ty 20)(scl 2) (nx 0) 0x00000000 **_printf**

[.text] の移転記録:

オフセット タイプ 値
00000020 DISP32 __アロカ
00000025 DISP32 ___メイン
00000033 dir32 .text
00000038 DISP32 **_printf**

ここでは、ベース C 関数でさえ、先頭にアンダースコアが追加されています。

を使ってみ-fno-leading-underscoreましたが、使い物になりません。

MingW バージョン:

$ gcc -v
C:/PROGRA~1/GNUCFO~1//ncbin/../lib/gcc-lib/i386-pc-mks/3.3.1/ から仕様を読み取る
スペック
以下で構成: configure --prefix=/usr/gnu i386-pc-mks --enable-languages=c,c+
+ --disable-nls --disable-shared --enable-sjlj-exceptions --enable-threads --dis
できる-win32-レジストリ
スレッドモデル: win32
gcc バージョン 3.3.1 (mingw スペシャル 20030804-1)
4

1 に答える 1

3

おそらく、Linux で生成されたファイル (またはその中のファイル)を試して使用したくないでしょう。*.a*.o

これらは Linux 環境用にコンパイルされており、CygWin では ABI (アプリケーション バイナリ インターフェイス) が異なることがほぼ確実にわかります。

CygWin は Linux に似たプログラミング環境を提供するため、ほぼ同じコードをコンパイルできます。その意味では、必ずしも ABI レイヤーではなく、API (アプリケーション プログラミング インターフェイス) レイヤーで互換性があります。

于 2013-04-29T07:11:18.310 に答える