2013-04-29 9 views
2

Windows에서 MinGW 컴파일러 설정이 필요합니다. 일부 타사 *.a 파일이 Linux 컴퓨터에서 직접 복사되는 프로젝트 설치가 필요합니다.생성 된 심볼 이름 앞에 밑줄이 붙습니다.

간단한 C 프로그램을 컴파일 해보고, *.o 파일의 심볼 테이블을 보면 모든 심볼 이름에 밑줄이 있습니다.

프로그램 예 :

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

SymbolTable 항목 :

 
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

질문이 있으십니까? –

답변

3

당신은 아마 시도하고 리눅스에서 생성 된 그 (그 안에 또는 *.o 파일) *.a 파일을 사용하지 않습니다.

이러한 것들이 Linux 환경 용으로 컴파일되었으며 CygWin에서 ABI (응용 프로그램 바이너리 인터페이스)가 서로 다를 수 있습니다. 당신은 대부분 동일한 코드를 컴파일 할 수 있도록

Cygwin에서, 당신에게 리눅스와 유사한 프로그래밍 환경을 제공합니다. 이러한 의미에서 API (애플리케이션 프로그래밍 인터페이스) 계층에서 호환 가능하며 반드시 ABI 계층 일 필요는 없습니다.

관련 문제