xlC 컴파일 옵션 - AIX
1. 32bit/64bit 컴파일
기본적으로 AIX용 컴파일러는 프로그램을 32bit 모드로 컴파일한다. 원하는 bit 모드를 지정하려면 컴파일러, 아카이버, 링키지 에디터 등을 위해 아래와 같이 bit 모드 옵션이나 환경변수를 사용할 수 있다.
- 컴파일러 옵션: -q32/-q64
- OBJECT_MODE 환경변수: 32/64
- Archive(ar) 옵션: -X32/-X64/-X32_64
- 링키지 에디터(ld) 옵션: -b32/-b64
아래는 64-bit 오브젝트를 생성하도록 컴파일하고 확인하는 예..
- $ xlf -c -q64 bt.f
- $ dump -ov -X32_64 bt.o
- bt.o:
- ***Object Module Header***
- # Sections Symbol Ptr # Symbols Opt Hdr Len Flags
- 4 0x000026fe 81 0 0x0000
- Flags=( )
- Timestamp = "Feb 14 11:18:07 2002"
- Magic = 0x1f7 (64-bit XCOFF)
위와 같이 dump 명령을 사용하면 실행 파일 또는 오브젝트 파일이 32-bit 모드인지 64-bit 모드인지 확인할 수 있는데, 위의 예에서는 '64-bit XCOFF'로 되어 있으므로 64-bit 오브젝트 파일임을 알 수 있다. 또한, dump 명령의 옵션인 -X32_64, -X32, -X64는 대상 파일의 bit 모드를 지정하는 것으로, 모를 때는 위와 같이 -X32_64를 사용하면 된다.
AIX 4.3 환경에서 컴파일한 64-bit 프로그램은 AIX 5L에서는 실행되지 않으므로 AIX 5L용으로 다시 컴파일 해주어야 하지만, 32-bit 프로그램은 AIX5L 이전의 버전에서 컴파일 된 실행파일을 그대로 사용할 수 있다.
운영체제의 32/64-bit 모드는 'ls -l /unix' 명령으로 확인할 수 있는데 /unix가 /usr/lib/boot/unix_64에 링크되어 있으면 64-bit 커널이고, /usr/lib/boot/unix_mp에 링크되어 있으면 32-bit 커널이다.
xlC 에 대해 알게 된것들
xlC는 주석을 엄밀히 확인하고 일반적인 c style의 comment에 대해 warnning하는 경우가 있다.
그리고 char type을 default로 unsigned값으로 보고 있다. char타입에 대해 멀티플렛폼으로 작성할 여부가 있는 프로그램의 경우 변수의 type을 char보다는 __uint8같은 명확한 type으로 명확히 정의함이 괜찮은 방법이다.
"sn3crypt.h", line 338.18: 1540-0804 (W) The characters "/*" are detected in a comment.
"sn3ole.h", line 189.73: 1540-0804 (W) The characters "/*" are detected in a comment.
"sn3pcm.h", line 70.17: 1540-0848 (S) The macro name "SN3_ARCHITECTURE" is already defined with a different definition.
"sn3pcm.h", line 54.17: 1540-0425 (I) "SN3_ARCHITECTURE" is defined on line 54 of "sn3pcm.h".
"sn3xls.h", line 51.49: 1540-0804 (W) The characters "/*" are detected in a comment.
make: 1254-004 The error code from the last command is
aix5, xlC컴파일러에서 next를 실행한 오류
컴파일을 하다가 난 warnning과 error이다. 여러 플렛폼에 있는 다양한 컴파일러로 컴파일을 할때 한번에 되지 않느다면 역시 컴파일러의 옵션을 봐야 한다. 여러종류의 컴파일러를 만났을 때 당황하지 말고 믿을 수 있는 것은 컴파일러에서 생성한 경고나 오류, 그리고 컴파일러 옵션임을 잊지 않는다.
위의 경우는 (W)는 warnning (S)에서 에러를 냈으므로 70 line을 찾는다.