링크 옵션
링크 옵션 (Link Options)
컴파일러가 오브젝트 파일들을 묶어 실행 파일로 만들어 주는 "링크 단계"에서만 의미를 갖는 옵션들을 소개하는 절이에요. 컴파일만 하고 링크를 하지 않는다면 이 옵션들은 아무 효과가 없어요.
출처: Link Options
본문
컴파일러가 오브젝트 파일을 실행 파일로 연결(link)할 때 이 옵션들이 적용돼요. 즉 옵션의 유효 범위가 "링크 단계"로 한정돼요. 컴파일러가 링크 단계를 수행하지 않는 상황(예: 컴파일만 하고 링크는 뒤로 미룬 경우)에서는 이 옵션들이 의미를 갖지 않아요.
주의할 점은 이 옵션들이 컴파일 단계의 최적화나 문법 처리 같은 것과는 무관하다는 거예요. 순전히 "만들어진 오브젝트 파일을 어떤 라이브러리와 어떻게 합칠지"를 결정하는 옵션이에요.
-static-libgfortran
libgfortran을 공유(shared) 라이브러리와 정적(static) 라이브러리로 모두 제공하는 시스템에서, 이 옵션은 정적 버전을 사용하도록 강제해요. 컴파일러를 빌드할 때 libgfortran의 공유 버전이 만들어지지 않았다면 이 옵션은 아무 효과가 없어요.
libgfortran은 gfortran이 만들어 낸 코드가 의존하는 표준 런타임 라이브러리예요. 정적 버전으로 링크하면 실행 파일에 라이브러리 코드가 통째로 들어가므로, 대상 시스템에 공유 라이브러리가 없어도 실행할 수 있다는 장점이 있어요. 대신 실행 파일 크기가 커지는 트레이드오프가 있어요.
-static-libquadmath
libquadmath를 공유 라이브러리와 정적 라이브러리로 모두 제공하는 시스템에서, 이 옵션은 정적 버전을 사용하도록 강제해요. 컴파일러를 빌드할 때 공유 버전이 만들어지지 않았다면 이 옵션은 아무 효과가 없어요.
참고로 libquadmath 런타임 라이브러리는 GNU Lesser General Public License(LGPL)로 배포돼요. 이 라이브러리를 정적으로 링크하면, 결과 바이너리를 재배포할 때 LGPL이 요구하는 조건이 추가로 붙게 돼요. 배포 계획이 있다면 이 라이선스 조건을 미리 확인해 두는 게 좋아요.
더 알아보기
- 링크 단계 전반에 대한 GNU Fortran 옵션 문서
- 런타임 동작에 영향을 주는 옵션들
- LGPL 라이브러리의 정적 링크와 재배포 조건