디스크 이미징 프로그램을 받아서 빌드하던 중 아래와 같은 에러가 났다.

ld_classic: can't locate file for: -lcrt0.o

즉 crt0.o를 찾지 못한다는 이야기인데 구글링해 보니 Apple Developer문서에 있는 내용이었다.

결론은 애플에서는 static링킹을 지원하지 않고 있으므로 가급적 dynamic linking을 사용하여 crt1.o를 링크하라는 내용이었다. 결국 그래서 Makefile에 있는 -static 옵션을 제거하고 동적으로 링킹해서 빌드를 했다.

그리고 반드시 static linking이 필요한 경우라면 Open Darwin에서 Csu 라는 모듈을 다운받아서 빌드후 crt0.o 를 사용하라고 한다. 단 이 모듈은 업데이트가 되지 않으므로 릴리즈 업데이트시 수동으로 빌드를 해 주어야 하는 단점이 있다.


다운받은 Csu module을 빌드할 때
export RC_ARCHS="ppc i386 ppc64 x86_64"
식으로 지정 후 make하면 원래 /usr/lib에 있던 기존 crt1.o와 같은 4가지 아키텍쳐를 지원하게 빌드 가능하다.

10.5.6에서 빌드한 Csu-75 결과물을 첨부파일로 올린다. tarball을 풀어서 crt0.o를 /usr/lib 에 집어넣고 빌드해 주거나 static 빌드하는 패키지에서 적당히 파일 링크를 추가하면 된다.
Posted by trip2me
,
벡터 연산이랑 복소수 연산이 필요해서 GNU의 (GSL - GNU Scientific Library)를 맥에 설치했다.

그리고 샘플을 컴파일하니 컴파일은 되고 링크에러가 아래처럼 났다.

~/trip2me$ gcc main.c
/usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: Undefined symbols:
_gsl_sf_bessel_J0
collect2: ld returned 1 exit status


검색을 통해서 DYLD_LIBRARY_PATH, LIBRARY_PATH, C_INCLUDE_PATH, CPLUS_INCLUDE_PATH 라는게 있다는 사실을 알고 환경변수에 /usr/local/bin을 추가해 주었지만 역시나 링킹이 되지 않았다. 왜!!! ㅠ_ㅠ;

결국 혹시나 해서
gcc -l gsl main.c
를 하니 아무말 없이 빌드 ㅡㅅㅡ;
그래 난 아직 완전 초보란 것이다.

PS. 그나저나 그럼 Xcode에는 저걸 어디다가 적어주지???
Posted by trip2me
,