반응형


보통 gcc나 g++은 /user/bin에 있고 cc는 gcc의 링크가 걸려 있다. (내가 알기로는)

HP-UX에서 사용하는 c++ 컴파일러는 aCC인데 해당 컴파일러의 위치는
/opt/aCC/bin에 있다. 물론 /opt/aCC에 lib나 include 관련 내용도 찾아 볼 수 있다.

CC 파일의 경우는 /usr/ccs에 보면 cc 파일이 있다.

----------------------------------------------------------------------------------
어쨋거나 HP-UX에서 사용하는 aCC용 옵션들을 보면 아래와 같다.


컴파일 옵션:

aCC
HP aC++ 컴파일러
$EXTRA_CFLAG
7 HP-UX 플랫폼에서 IA64 및 64비트 지원이 사용 가능한 경우 이 플래그는7 7 +DD64 -AA 7 값을 포함하고, 32비트 지원이 사용 가능한 경우7 7 +DD32 -AA 7 값을 포함합니다. HP-UX 플랫폼에서 PA-RISC 및 64비트 지원이 사용 가능한 경우,7 +DA2.0W 값을 포함합니다. PA-RISC 플랫폼에서의 32비트 지원을 위해 이 플래그에는 값이 포함되지 않습니다.7 7
7
+DD64
7
IA64의 HP-UX용 64비트 코드를 생성하기 위해 사용되어야 합니다.7
7
+DD32
7
IA64의 HP-UX용 32비트 코드를 생성하기 위해 사용되어야 합니다.7
7 7
-AA
7
IA64에서 이름공간 std 및 C++ 표준 라이브러리와 같은 ANSI C++ 표준 기능을 허용합니다.7
7 7
+DA2.0W
7
PA-RISC의 HP-UX용 64비트 코드를 생성하기 위해 사용되어야 합니다.7
7
-ext
"long long" 지원을 포함하는 여러 C++ 확장자를 사용할 수 있게 합니다.
-I$DB2PATH/include
DB2 포함 파일의 위치를 지정합니다. 예를 들면, $HOME/sqllib/include와 같습니다.
-c
컴파일만 수행하고 링크는 수행하지 마십시오. 컴파일과 링크는 서로 다른 단계입니다.

링크 옵션

aCC
링커에 대한 프론트엔드로 HP aC++ 컴파일러를 사용합니다.
$EXTRA_CFLAG
7 HP-UX 플랫폼에서 IA64 및 64비트 지원이 사용 가능한 경우 이 플래그는7 7 +DD64 -AA 7 값을 포함하고, 32비트 지원이 사용 가능한 경우7 7 +DD32 -AA 7 값을 포함합니다. HP-UX 플랫폼에서 PA-RISC 및 64비트 지원이 사용 가능한 경우,7 +DA2.0W 값을 포함합니다. PA-RISC 플랫폼에서의 32비트 지원을 위해 이 플래그에는 값이 포함되지 않습니다.7 7
7
+DD64
7
IA64의 HP-UX용 64비트 코드를 생성하기 위해 사용되어야 합니다.7
7
+DD32
7
IA64의 HP-UX용 32비트 코드를 생성하기 위해 사용되어야 합니다.7
7 7
-AA
7
IA64에서 이름공간 std 및 C++ 표준 라이브러리와 같은 ANSI C++ 표준 기능을 허용합니다.7
7 7
+DA2.0W
7
PA-RISC의 HP-UX용 64비트 코드를 생성하기 위해 사용되어야 합니다.7
7
-o $1
실행 파일을 지정합니다.
$1.o
프로그램 오브젝트 파일을 지정합니다.
utilemb.o
Embedded SQL 프로그램의 경우, 오류 점검을 위한 Embedded SQL 유틸리티 오브젝트 파일을 포함합니다.
utilapi.o
non-Embedded SQL 프로그램의 경우, 오류 점검을 위한 DB2 API 유틸리티 오브젝트 파일을 포함합니다.
7 7
$EXTRA_LFLAG
7
런타임 경로를 지정합니다. 설정되어 있는 경우, 32비트에 대해서는 -Wl,+b$HOME/sqllib/lib32 값이 포함되며 64비트에 대해서는 -Wl,+b$HOME/sqllib/lib가 포함됩니다. 설정하지 않은 경우, 값을 포함하지 않습니다.7
7 7
-L$DB2PATH/$LIB
7
DB2 런타임 공유 라이브러리의 위치를 지정합니다. 7 32비트의 경우: $HOME/sqllib/lib32; 64비트의 경우:7 $HOME/sqllib/lib.7
-ldb2
DB2 라이브러리로 링크합니다.

추가 컴파일러 옵션에 대한 내용은 해당 컴파일러의 문서를 참조하십시오.



또한 HP-UX에서 사용하는 cc용 옵션들을 보면 아래와 같다. cc는 /usr/bin에 위치하고 있다.

컴파일 옵션:

cc
C 컴파일러
$EXTRA_CFLAG
7 HP-UX 플랫폼에서 IA64 및 64비트 지원이 사용 가능한 경우 이 플래그는7 +DD64 값을 포함하고, 32비트 지원이 사용 가능한 경우7 +DD32 값을 포함합니다. HP-UX 플랫폼에서 PA-RISC 및 64비트 지원이 사용 가능한 경우,7 +DA2.0W 값을 포함합니다. PA-RISC 플랫폼에서의 32비트 지원을 위해 이 플래그에는 값이 포함되지 않습니다.7 7
7
+DD64
7
IA64의 HP-UX용 64비트 코드를 생성하기 위해 사용되어야 합니다.7
7
+DD32
7
IA64의 HP-UX용 32비트 코드를 생성하기 위해 사용되어야 합니다.7
7
+DA2.0W
7
PA-RISC의 HP-UX용 64비트 코드를 생성하기 위해 사용되어야 합니다.7
7
-Ae
HP ANSI 확장 모드를 사용 가능하게 합니다.
-I$DB2PATH/include
DB2 포함 파일의 위치를 지정합니다.
-c
컴파일만 수행하고 링크는 수행하지 마십시오. 컴파일과 링크는 서로 다른 단계입니다.

링크 옵션

cc
링커에 대한 프론트엔드로 컴파일러를 사용합니다.
$EXTRA_CFLAG
7 HP-UX 플랫폼에서 IA64 및 64비트 지원이 사용 가능한 경우 이 플래그는7 +DD64 값을 포함하고, 32비트 지원이 사용 가능한 경우7 +DD32 값을 포함합니다. HP-UX 플랫폼에서 PA-RISC 및 64비트 지원이 사용 가능한 경우,7 +DA2.0W 값을 포함합니다. PA-RISC 플랫폼에서의 32비트 지원을 위해 이 플래그에는 값이 포함되지 않습니다.7 7
7
+DD64
7
IA64의 HP-UX용 64비트 코드를 생성하기 위해 사용되어야 합니다.7
7
+DD32
7
IA64의 HP-UX용 32비트 코드를 생성하기 위해 사용되어야 합니다.7
7
+DA2.0W
7
PA-RISC의 HP-UX용 64비트 코드를 생성하기 위해 사용되어야 합니다.7
7
-o $1
실행 파일을 지정합니다.
$1.o
프로그램 오브젝트 파일을 지정합니다.
utilemb.o
Embedded SQL 프로그램의 경우, 오류 점검을 위한 Embedded SQL 유틸리티 오브젝트 파일을 포함합니다.
utilapi.o
non-Embedded SQL 프로그램의 경우, 오류 점검을 위한 DB2 API 유틸리티 오브젝트 파일을 포함합니다.
7 7
$EXTRA_LFLAG
7
런타임 경로를 지정합니다. 설정되어 있는 경우, 32비트에 대해서는 -Wl,+b$HOME/sqllib/lib32 값이 포함되며 64비트에 대해서는 -Wl,+b$HOME/sqllib/lib가 포함됩니다. 설정하지 않은 경우, 값을 포함하지 않습니다.7
7 7
-L$DB2PATH/$LIB
7
DB2 런타임 공유 라이브러리의 위치를 지정합니다. 7 32비트의 경우: $HOME/sqllib/lib32; 64비트의 경우:7 $HOME/sqllib/lib.7
-ldb2
DB2 라이브러리로 링크합니다.

추가 컴파일러 옵션에 대한 내용은 해당 컴파일러의 문서를 참조하십시오.

반응형
반응형

 




AIX에서 사용하는 사용하는 컴파일러는 IBM에서 제공하는 xl이라는 Compiler가 쓰인다.

이 xl은 xlc로도 쓰이며 _r 이 붙게 되면 Thread-Safe의 의미가 된다.
정확하게 어떤 부분이 Safe한지는 잘 모르겠다.

xl 씨리즈는 굉장히 많은 종류가 있는데 /usr/vacpp/bin에 보면 C++
그리고 /usr/vac/bin에 보면 C에 해당 하는 컴파일러 종류들을 살펴 볼 수 있겠다.


위의 그림은 /usr/vacpp/bin에 들어있는 컴파일러들의 모습.

-----------------------------------------------------------------------------------------------------------------------------
Hard Link 
똑같은 파일이 복사되어 있는 것으로 원복을 삭제해도 복사본의 내용은 남아 있으며 복사본의 내용을 추가하면 원본의 내용에도 추가되는 구조.

Symbolic Link
원본의 파일에 대한 위치와 정보만을 갖고 있음.
-----------------------------------------------------------------------------------------------------------------------------
위 컴파일러들은 모두 기본적으로 xlc의 Symbolic Link가 걸려 있는데 각자 자신이 호출된 이름에 맞는 동작을 한다고 한다.
따라서 xlc를 사용한 것과 xlC를 사용하는 부분은 구분해야 한다.


-----------------------------------------------------------------------------------------------------------------------------
출처 : http://susukang98.springnote.com/pages/377244.xhtml

오래된 머신에서는 xlc가 깔려 있다고 한다.
AIX에서 사용하는 옵션을 살펴보자면

 Version  [kernel 2.x, GCC 2.95.x and later]  4.3 and Later
 2a  shared library creation flag  -bM:SRE
 2b  shared library creation (C++)  cxx -shared -o
xlC -G (or -qmkshrobj)
obsolete:/usr/vacpp/bin/makeC++SharedLib -G -o
(was in /usr/ibmcxx/bin or /usr/lpp/xlC/bin/)
 2c  static archiver (C++)  ar
 3b  file extension  .so (or .a)
 4  executable link options -brtl
-bdynamic
-Lpath -lname
 5a runtime path specification  -blibpath:<path>
(by default, it is set to the arguments of -L)
 5b   Does not build the path for shared libraries into the executable  -blibpath:/usr/lib:/lib
 7 exports file/link option
(see notes)
 .exp
 9  runtime library path  LIBPATH
 11  runtime debugging  LDR_CNTRL
 17  dynamic loading /
dynamic symbol access
 loadquery/loadbind
(AIX 4.2) dlopen / dlsym
 18  utilities  dump -H
ldd (in AIX tools)
 19  documentation man: ld, dump


-----------------------------------------------------------------------------------------------------------------------------

1. 32bit/64bit 컴파일

기본적으로 AIX용 컴파일러는 프로그램을 32bit 모드로 컴파일한다. 원하는 bit 모드를 지정하려면 컴파일러, 아카이버, 링키지 에디터 등을 위해 아래와 같이 bit 모드 옵션이나 환경변수를 사용할 수 있다.

- 컴파일러 옵션: -q32/-q64

- OBJECT_MODE 환경변수: 32/64

- Archive(ar) 옵션: -X32/-X64/-X32_64

- 링키지 에디터(ld) 옵션: -b32/-b64

아래는 64-bit 오브젝트를 생성하도록 컴파일하고 확인하는 예..
  1. $ xlf -c -q64 bt.f
  2. $ dump -ov -X32_64 bt.o
  3. bt.o:
  4. ***Object Module Header***
  5. # Sections Symbol Ptr # Symbols Opt Hdr Len Flags
  6. 4 0x000026fe 81 0 0x0000
  7. Flags=( )
  8. Timestamp = "Feb 14 11:18:07 2002"
  9. 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는 주석을 엄밀히 확인하고 일반적인 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을 찾는다.






반응형

+ Recent posts