특정(종종 충돌하는) 라이브러리로 컴파일해야 하는 레거시 코드가 많이 있습니다. 구체적으로 말하면, 로만 컴파일할 수 있는 프로그램 g77
과 로만 사용할 수 있는 프로그램이 있습니다 gfortran
.
첫 번째 프로그램을 호출해보자마케이그리고 두 번째 프로그램UVES_popler.
컴파일(및 실행)할 때 모두 연결되어야 합니다.그림이는 해당 컴파일러로 컴파일됩니다. 그래서, 컴파일마케이g77로 실행해야지그림g77
이것도 정리되었습니다. 그리고 각각 똑같다UVES_popler그리고 gfortran
.
g77 및 gfortran을 사용하여 pgplot을 컴파일할 수 있다고 가정하면 bashrc를 구성하는 모범 사례는 무엇입니까? 각 프로그램에 대해 bash 기능을 만들고 올바른 링크와 LD_LIBRARY_PATH
s를 가져야 합니까? 그것은 다음과 같습니다:
runmakee() {
export LD_LIBRARY_PATH=/path/to/g77-pgplot/
makee
}
그리고 (아마도 관련이 있을 수 있지만) 이러한 프로그램이 별도로 컴파일될 때 올바른 라이브러리가 호출되도록 Makefile에 플래그를 설정하는 방법이 있습니까?
답변1
Bash 기능은 작동해야 하지만 "일반적인" 접근 방식은 각 실행 파일에 대한 래퍼 스크립트를 작성하고 그 안에 설정해야 하는 모든 항목을 설정하는 것입니다. (예를 들어 실행 파일 이름을 변경 foo.bin
하고 더 쉽게 호출하기 위해 래퍼 스크립트를 호출할 수 있습니다 foo
.)
ELF 대상의 경우(다른 개체 형식은 확실하지 않음) -rpath
링커 옵션을 설정하여 실행 파일에서 런타임 라이브러리 검색 경로를 직접 하드코딩할 수도 있습니다. gcc(C 코드용)를 사용하면 최종 연결 단계는 다음과 같습니다.
gcc ... -Wl,-rpath,/your/hardcoded/path ...
Fortran 컴파일러에도 비슷한 옵션이 있거나 링커 옵션을 직접 변경할 수 있다고 가정합니다(이 경우 옵션은 -rpath /your/path
).