이전에 IBM AIX에서 잠깐 작업해본 적이 있었습니다.
gcc 기반으로 작성된 놈을 포팅하는 거였는데, ANSI 표준을 지켜서 작성한 경우 별 어려움 없이 컴파일 되었습니다. (소스 파일만 100여개가 넘는 놈인데 한 방에 빌드 되었습니다. -_-; 정작 파일 두 개짜리는 에러나서 애 좀 먹고 ;; )
VAC인지 아닌지는 모르겠습니다. c 컴파일러 파일명이 xlc 인가 그렇던데......
그리고, AIX에도 gcc 설치 가능한 걸로 아는데요? 처음에는 gcc 쓰려다 설치 안 되어 있어서 그냥 장비에 있는 컴파일러 썼었는데...... 이후에 몇 번 gcc 깔아달라고 했었지만 -_-; gcc 쓸 이유가 없어져서 안 썼다는.. ;;;
파일 두 개 짜리에서 애먹었던 이유는, 어떤 라이브러리를 링크해야 하는지 찾느라 삽질한 것과, 표준 문법에서 좀 어긋나있던 게 있었다는 것, 이 두 가지 이유였습니다.
참고로, 저 100여개짜리 소스 프로젝트는...... 윈도/리눅스/유닉스 모두 포팅되어 돌아가고 있습니다. Endian 문제도 없고, 컴파일 할 때 오류도 거의 안 나더군요. ANSI / POSIX 표준만 잘 지키면, 그리고 링크될 라이브러리만 잘 지정하면 포팅할 때 크게 문제되는 일은 없는 것 같습니다. gcc건 VC++이건 아님 다른 c / c++ 컴파일러건 말이죠.
VAC를 rpm으로 설치하려 했다는 것은 리눅스에서 했다는 말인지,
aix에서 했다는 말인지 모르겠네요.
그리고, linux에서 gcc로 컴파일 했다는 말은, linux에서 gcc로 테스트한
소스를 말하는 것인지, 컴파일된 바이너리를 말하는건지..
정황으로 봐서는 소스를 들고 가신다는 말 같은데.. 예전에 같은 프로그램을
linux, solaris, aix, hp-ux용으로 개발할때 보니까 거의 비슷한데 아주
조금씩 다른 부분이 있었습니다. 소스 차원에서도 쬐끔 손을 봐야 했고,
동작도 미묘한 차이를 보였습니다. 어차피 완전히 다른 시스템들이니까..
참, 위 시스템 모두 gcc 잘 깔리고 개발하는데 전혀 지장없습니다. 다만,
특정 라이브러리를 가지고 개발해야 할때는 전용 컴파일러 아니면 안되는
경우가 있었습니다.
getc() 함수의 리턴값은 char형이 아니라 int형 입니다. getc 함수가 리턴하는 값의 범위는 0~ 255 와 EOF 입니다. 이것은 char형이나 unsigned char형으로는 모두 다 표현할 수가 없습니다. 따라서 getc 함수의 리턴 값을 받을 때는 int형 변수를 사용해야 합니다.
만약 int형 대신에 char형 변수를 사용할 경우에는 -1 ~ -128 중의 숫자 하나와 EOF가 겹치게 됩니다. 따라서 그 값은 받지 못하게 되는 것이죠. unsigned char형인 경우에는 아예 EOF 값을 받지 못합니다. .그리고 unsigned integer 형에 음수를 저장하는 행위는 항상 % 연산을 통해 처리하도록 정의되어 있기 때문에, 경고 하나 안뜰 가능성이 큽니다.
또한 EOF가 어떤 값이냐에 따라서도 얘기가 달라질 수 있습니다. 제가 알기로 EOF는 '(컴파일러가 각자 정한) 임의의 음수 값'이라고 알고 있습니다. EOF로 사용 가능한 수의 범위가 어디까지인지는 모르겠지만, 만약 EOF로 -128보다 작은 음수 값을 사용하는 것이 허용되어 있다면, 그리고 사용하시는 컴파일러에서 실제로 그렇게 정의되어 있다면 char형으로는 도저히 표현할 수가 없으므로 위의 if문은 영원히 false가 되겠지요.
답변이 되지는 못하겠지만요... AIX 에 gcc 를 설치하지 못하는 이
답변이 되지는 못하겠지만요... AIX 에 gcc 를 설치하지 못하는 이유가 있습니까? 없다면 gcc 로 하시는 것이 어떨지요?
이전에 IBM AIX에서 잠깐 작업해본 적이 있었습니다.gcc 기반으
이전에 IBM AIX에서 잠깐 작업해본 적이 있었습니다.
gcc 기반으로 작성된 놈을 포팅하는 거였는데, ANSI 표준을 지켜서 작성한 경우 별 어려움 없이 컴파일 되었습니다. (소스 파일만 100여개가 넘는 놈인데 한 방에 빌드 되었습니다. -_-; 정작 파일 두 개짜리는 에러나서 애 좀 먹고 ;; )
VAC인지 아닌지는 모르겠습니다. c 컴파일러 파일명이 xlc 인가 그렇던데......
그리고, AIX에도 gcc 설치 가능한 걸로 아는데요? 처음에는 gcc 쓰려다 설치 안 되어 있어서 그냥 장비에 있는 컴파일러 썼었는데...... 이후에 몇 번 gcc 깔아달라고 했었지만 -_-; gcc 쓸 이유가 없어져서 안 썼다는.. ;;;
파일 두 개 짜리에서 애먹었던 이유는, 어떤 라이브러리를 링크해야 하는지 찾느라 삽질한 것과, 표준 문법에서 좀 어긋나있던 게 있었다는 것, 이 두 가지 이유였습니다.
참고로, 저 100여개짜리 소스 프로젝트는...... 윈도/리눅스/유닉스 모두 포팅되어 돌아가고 있습니다. Endian 문제도 없고, 컴파일 할 때 오류도 거의 안 나더군요. ANSI / POSIX 표준만 잘 지키면, 그리고 링크될 라이브러리만 잘 지정하면 포팅할 때 크게 문제되는 일은 없는 것 같습니다. gcc건 VC++이건 아님 다른 c / c++ 컴파일러건 말이죠.
Re: IBM AIX 머신에서 돌아가는 컴파일러.
VAC 는 VisualAge C/C++ 입니다.
http://www-3.ibm.com/software/awdtools/ccompilers/
여기에서 나오고 좀 비쌉니다...
http://www14.software.ibm.com/webapp/download/product.jsp?s=p&id=TDUN-49EVS5
여기서 60 일짜리 trial 판을 구할 순 있습니다.
---------
귓가에 햇살을 받으며 석양까지 행복한 여행을...
웃으며 떠나갔던 것처럼 미소를 띠고 돌아와 마침내 평안하기를...
- 엘프의 인사, 드래곤 라자, 이영도
즐겁게 놀아보자.
드뎌 모듈 설치하러 오늘 들어갑니다. 헌데. AIX 기반에 VAC
드뎌 모듈 설치하러 오늘 들어갑니다.
헌데. AIX 기반에 VAC(visual age for C/C++)에 대해 아는게
없어서 .. 알려주신 IBM 사이트 들어가서 평가판 다운받아
rpm 설치하려 했는데... 실패 했습니다. 생각엔 x-window상에서
설치해야 하지 않나 생각되어지는데...
암튼... vac로 컴팔도 못해보고 linux 머신 gcc 로 컴팔한걸 들고
들어가봐야 하는데.... 심히 걱정스럽습니다. 또한 pthread를 사용합니다
과연 POSIX 라이브러리가 깔렸는지.....
질문 드립니다. gcc 와 posix 라이브러리를 설치 하려면.. 참고 도움말
부탁 드립니다. 시간에 쫏겨 이렇게 질문 드립니다.
아 마지막으로 vac는 콘솔에서 컴팔이 가능한지도 알고 싶습니다...
그럼 즐거운 하루 되세요.....
“바람에게도 길은 있다. 나는 비로소 나의 길을 가느니. 길은 언제나 어디에나 있다.”
[quote="하하"]드뎌 모듈 설치하러 오늘 들어갑니다. 헌데.
당연히 컴파일 가능합니다.
그리고 aix가 어떤 상태로 깔렸느냐에 따라 -_-;
상태가 천차 만별일껍니다..
업체에따라 -_-;; 다르게 깔립니다;;
제 경우지만 xlc 로만 컴파일 되는것도 있었습니다. ( 본인이 c를 몰라 소수 수정을 못했습니다; )
------------------------------------------------------------------------------------------------
Life is in 다즐링
상황 정리가 잘 안되네요.VAC를 rpm으로 설치하려 했다는 것은
상황 정리가 잘 안되네요.
VAC를 rpm으로 설치하려 했다는 것은 리눅스에서 했다는 말인지,
aix에서 했다는 말인지 모르겠네요.
그리고, linux에서 gcc로 컴파일 했다는 말은, linux에서 gcc로 테스트한
소스를 말하는 것인지, 컴파일된 바이너리를 말하는건지..
정황으로 봐서는 소스를 들고 가신다는 말 같은데.. 예전에 같은 프로그램을
linux, solaris, aix, hp-ux용으로 개발할때 보니까 거의 비슷한데 아주
조금씩 다른 부분이 있었습니다. 소스 차원에서도 쬐끔 손을 봐야 했고,
동작도 미묘한 차이를 보였습니다. 어차피 완전히 다른 시스템들이니까..
참, 위 시스템 모두 gcc 잘 깔리고 개발하는데 전혀 지장없습니다. 다만,
특정 라이브러리를 가지고 개발해야 할때는 전용 컴파일러 아니면 안되는
경우가 있었습니다.
"하하"님이 게시판 볼때 쯤이면 결과가 나왔을 것 같은데.. :D
포팅 했슴다.그런데. 97==> if ( ch =
포팅 했슴다.
그런데.
97==> if ( ch == -1 )
return (-1);
util.c:97: warning: comparison is always false due to limited range of data type
이런 워닝이 떨어지는데 좀 찜찜하네요..
비교는 항상 에러라니.. 이게 무슨 .. 말인지......
그렇담 이걸 빼야 하는지...
^^... 도움 부탁드립니다...
“바람에게도 길은 있다. 나는 비로소 나의 길을 가느니. 길은 언제나 어디에나 있다.”
ch가 unsigned이면 -1과의 비교는 항상 거짓이라는내용이죠.
ch가 unsigned이면 -1과의 비교는 항상 거짓이라는
내용이죠. ch가 unsigned 타입인가 보네요.
다른 값으로 비교하거나 signed 타입으로 바꾸셔야
정상입니다. 이건 다른 컴파일러에서도 잡을텐데...
--
익스펙토 페트로눔
[quote]ch가 unsigned이면 -1과의 비교는 항상 거짓이라
unsigned char 형 일땐. 부호를 표시 못하여 이런 워닝을 내신다고
하셨는데 실제 코드부분은 char형 입니다.
님께서 얘기해주신 부분은 아닌거 같아 글 올립니다.
그럼 즐거운 하루 되세요.
“바람에게도 길은 있다. 나는 비로소 나의 길을 가느니. 길은 언제나 어디에나 있다.”
음... 뭔가 내부적으로 char가 unsigned char로 정
음... 뭔가 내부적으로 char가
unsigned char로 정의 되어있는게 아닐까요?
확실하게 signed char라고 선언해보심이...
[quote="하하"][quote]ch가 unsigned이면 -1과의
처음부터 그렇게 좀 더 자세한 코드를 올려주셨으면 얘기가 쉬워졌을텐데 말이죠.
getc() 함수의 리턴값은 char형이 아니라 int형 입니다. getc 함수가 리턴하는 값의 범위는 0~ 255 와 EOF 입니다. 이것은 char형이나 unsigned char형으로는 모두 다 표현할 수가 없습니다. 따라서 getc 함수의 리턴 값을 받을 때는 int형 변수를 사용해야 합니다.
만약 int형 대신에 char형 변수를 사용할 경우에는 -1 ~ -128 중의 숫자 하나와 EOF가 겹치게 됩니다. 따라서 그 값은 받지 못하게 되는 것이죠. unsigned char형인 경우에는 아예 EOF 값을 받지 못합니다. .그리고 unsigned integer 형에 음수를 저장하는 행위는 항상 % 연산을 통해 처리하도록 정의되어 있기 때문에, 경고 하나 안뜰 가능성이 큽니다.
또한 EOF가 어떤 값이냐에 따라서도 얘기가 달라질 수 있습니다. 제가 알기로 EOF는 '(컴파일러가 각자 정한) 임의의 음수 값'이라고 알고 있습니다. EOF로 사용 가능한 수의 범위가 어디까지인지는 모르겠지만, 만약 EOF로 -128보다 작은 음수 값을 사용하는 것이 허용되어 있다면, 그리고 사용하시는 컴파일러에서 실제로 그렇게 정의되어 있다면 char형으로는 도저히 표현할 수가 없으므로 위의 if문은 영원히 false가 되겠지요.
댓글 달기