gcc 4

링킹 뭘로 할까 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

passing argument ... with different width due to prototype

gcc를 이용하여 컴파일을 하다보면, 자주 보게되는 경고문이다. 먼저 선언해두었던 함수의 원형과는 일치하지않는 전달인자를 넘겼을 경우에 발생한다. 물론 -Wconversion 옵션을 설정하지 않으면 발생하지 않겠지만, 꼼꼼하게 하려는 생각에 사용한다. 그런데 참 이해하기 힘든 상황이 발생했었다. lovian$ cat a.c int func (unsigned char aa) { return 1; } int main () { func ((unsigned char)0); return 0; } lovian$ gcc a.c -Wconversion a.c: In function ‘main’: a.c:7: warning: passing argument 1 of ‘func’ with different width due..

IT한 것/unix 2011.09.23

iPhone SDK 4.0 beta3에서 기존 라이브러리 링킹 실패(symbol not found)

iPhone SDK 4가 아직 완성 release버전은 아니지만, 이전의 호환성을 위해서 기존에 빌드된 라이브러리를 그대로 링킹 시도를 해보았는데. 분명히 링킹이 되었음에도, symbol not found 오류를 내뱉어낸다. ar로 모듈을 까보아도 분명히 심볼은 있음을 확인할 수 있다. 혹시나 해서 특정 object 파일을 까보기 시작했다. 자체 makefile로 빌드한 모듈 x86.o: 00000000 t +[XWHWInfo_local getDeviceID] x86.o: 000000b1 t +[XWHWInfo_local getPhoneNumber] x86.o: U .objc_class_name_NSObject x86.o: U .objc_class_name_NSUserDefaults x86.o: U .o..

unknown symbol '_stack_chk_fail_local'

more undefined references to `__stack_chk_fail_local' follow linux에서 빌드를 하다보면 이런 링크 에러메시지를 만날 수 있다. 당최 어디있는지도 모를 것을 왜 참조하는지 궁금하다. gcc 4.x 이상부터 있는 stack protector란 녀석을 사용하기 위해서 자동으로 링크되는 것으로 보인다. gcc 4.x 에서 빌드한 라이브러리를 gcc 3..x 에서 링크하여 쓸려고 했기 때문에 이런 문제가 발생한다. 해결책은. 4.x 이상에서 빌드할때에 -fno-stack-protector 옵션을 주라고 한다. 해보진 않았다 ㅋㅋ

IT한 것 2008.01.18