Unix 3

링킹 뭘로 할까 gcc/cc, ld ??

최근 특이한 일을 겪었다. solaris x86 플랫폼에서 빌드 할 일이 있었는데, c 소스를 gcc로 컴파일하고 ld로 링킹을 하고 있었다. 이 과정까지는 문제가 없었는데, 실행파일을 만들고 실행을하면.모든 로직을 수행 후, segmentation fault가 발생한다.※심지어는 hello world만 찍어도 그렇다. 이미 소스코드 레벨의 문제가 아니라는 것이 확인되었으니, 링커를 변경해봤다.gcc/cc로 링킹을 해보니 정상적으로 작동한다. 응? 뭐지? 뭔가 그 동안 잘못 알고 있는게 아닌가 싶어서 oracle에 접속.그리고 발견Direct Invocation When you invoke the link-editor directly, you have to supply every object file a..

IT한 것/unix 2012.05.02

HP-UX 32bit 모듈의 pstat_getproc 가 실패할때.

프로세스의 정보를 알아내기 위해서 pstat_getproc 를 이용하기로 하였다. 마침 원하는 정보가 있었기에 아무 부담없이 사용하며 잘 작동하였다. 처음에는 64비트로 테스트를 했었는데, 문득 32비트가 궁금해서 테스트를 시도했더니. ERRNO 72 EOVERFLOW와 함께 실패했다. 사유를 알아본 즉. 32비트 모듈이 32비트 프로세스의 정보를 pst_status(pstat_getproc에 넘겨줄 정보를 넣을 구조체)에 입력하는데에 아무 지장이 없겠지만. HP-UX머신에는 32/64 바이너리가 혼재하여 있으므로 64비트 프로세스의 정보를 32비트 구조체에 정보를 입력하는데에 문제가 발생한다고 한다. 이번에도 컴파일 플래그로 해결이 되었다. 그리고 그 값은 _PSTAT64 이다. 예를 들면 cc -D_..

IT한 것/unix 2008.05.08

Solaris 8에서 하드디스크 추가하기(SCSI)

내가 담당하고 있는 서버에 하드디스크 공간이 부족하다. 물론 필요없는 내용을 날려버리거나 백업하면 되지만, 날리는 것은 당연히 문제가 있고, 백업하기에는 좀 찝찝하다. 그래서 하드디스크를 추가하기로 하였다. format -> format -> label -> partition -> label 이런 순으로 커맨드를 입력하여 포맷까지는 완료하였으나 파티셔닝과 마운트를 도저히 할 수가 없었다. 결국 검색 끝에 여기 에서 설명한 것을 그대로 따라하여 성공하였다. 내가 부족했던 것은. newfs로 파일 시스템을 생성후에 마운트의 디바이스를 하드웨어로 설정한 것이다. 즉 /dev/rdsk/c#t#d#s# 으로 설정하여 파티션을 못찾았고 /dev/dsk/c#t#d#s#으로 설정하자 올바르게 마운트 되었다.

IT한 것/unix 2007.04.04