2009-08-19 4 views
2

C 및 Fortran으로 작성된 일부 코드는 정적으로 링크 된 실행 파일로 컴파일하려고합니다. 코드를 동적으로 컴파일하면 (gfortran에 대해 -fno-underscoring 옵션 사용) 모든 것이 올바르게 동작합니다. 그러나 필요한 라이브러리의 대부분을 정적으로 연결 한 .so 파일에 링크 한 다음 this blog post에 설명 된 방법과 매우 비슷하게 libkrb5에 동적으로 연결하고 싶습니다.gfortran 및 gcc와 정적으로 연결된 언어

나는 이전 블로그 게시물의 단계를 따르고 .so 라이브러리를 아무 문제없이 컴파일 할 수있었습니다. 그래서,

[...]001020b9 T turnover 
[...]000d31ea T initio 

첫 번째 함수는 포트란으로 작성되며, C.에서 두 번째로 그들은 밑줄 또는 아무것도하지 않습니다 nm는 내 포트란 서브 루틴 및 C의 기능을 보여주는 함께 좋은 상태에 있음을 보여줍니다 그들은 연결해야합니다. 내 메인 프로그램 (Fortran)은 다른 Fortran 소스 파일처럼 컴파일된다. 내가 연결하려고 할 때,하지만, 나는 오류가 발생 :

gfortran -m32 main_program.o -o program_static -L./ -llibname -lkrb5 -lgssapi_krb5 -lsasl2 -lgfortran 
/usr/lib/gcc/i486-linux-gnu/4.3.3/../../../../lib/crt1.o: In function `_start': 
/build/buildd/glibc-2.9/csu/../sysdeps/i386/elf/start.S:115: undefined reference to `main' 

collect2 : 신분증이 main_program.o에서 종료 상태 1

을 반환, 나는

00000000 T MAIN__ 

모든 순서대로 보이는이 있다고 볼 수 있습니다 , 그래서 그것은 왜 연결되어 있지 않습니까?

답변

3

좋아요, 내가 생각했던 것보다 더 간단하다는 것입니다! gfortran을 사용하여 링크해야하며 마지막 단계에서 gfortran을 무시하면됩니다.

gfortran -static-libgfortran -m32 main_program.o -o program_static\ 
     -L./ -llibname -lkrb5 -lgssapi_krb5 -lsasl2 

이제 작동하게됩니다.