2013-04-29 71 views
2

我在Windows中有一個MinGW編譯器設置。並在項目設置中從Linux機器直接複製某些第三方*.a文件。生成的符號名稱有額外的前導下劃線

嘗試編譯一個簡單的C程序,當我查看*.o文件的符號表時,它對所有符號名稱都有前導下劃線。

實施例的程序:

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

符號表條目:

 
Sections: 

Idx Name   Size  VMA  LMA  File off Algn 
    0 .text   00000040 00000000 00000000 0000008c 2**2 
        CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE 
    1 .data   00000000 00000000 00000000 00000000 2**2 
        ALLOC, LOAD, DATA 
    2 .bss   00000000 00000000 00000000 00000000 2**2 
        ALLOC 

SYMBOL TABLE: 

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

RELOCATION RECORDS FOR [.text]: 

OFFSET TYPE    VALUE 
00000020 DISP32   __alloca 
00000025 DISP32   ___main 
00000033 dir32    .text 
00000038 DISP32   **_printf** 

這裏甚至鹼基C功能與下劃線前綴。

嘗試使用-fno-leading-underscore,但沒有用。

MingW平臺版本:

 
$ gcc -v 
Reading specs from C:/PROGRA~1/GNUCFO~1//ncbin/../lib/gcc-lib/i386-pc-mks/3.3.1/ 
specs 
Configured with: configure --prefix=/usr/gnu i386-pc-mks --enable-languages=c,c+ 
+ --disable-nls --disable-shared --enable-sjlj-exceptions --enable-threads --dis 
able-win32-registry 
Thread model: win32 
gcc version 3.3.1 (mingw special 20030804-1) 
+0

你有問題嗎? – 2013-04-29 07:43:06

回答

3

你可能想嘗試和使用(在其中或*.o文件)*.a文件在Linux下生成的。

這些東西已經爲Linux環境編譯過了,你幾乎可以肯定地發現CygWin中的ABI(應用程序二進制接口)是不同的。

CygWin的爲您提供了類似Linux的一個編程環境,這樣就可以多爲編譯相同的代碼。從這個意義上說,它在API(應用程序編程接口)層兼容,不一定是ABI層。

相關問題