2013-08-23 4 views
0

다소 우스꽝 스럽지만 OpenBLAS 라이브러리를 프로젝트로 가져 오려고합니다. 그들은 gfortran으로 Fortran 컴파일러로 빌드되었습니다. 초기 빌드는 단지 libopenblas.so을 가져 오는 데 아무런 문제가 없었지만 다른 시스템에서는 거기에 존재하지 않는 프로그램을 실행하려고 시도 할 때 libgfortran.so에서 질식합니다. 필자가 생각하기에이 라이브러리는 대부분의 Linux 시스템에서 표준 라이브러리입니다. 아마도 Artifactory에 libgfortran.so 사본을 추가하고 Apache Ivy가 가져 오도록 할 수는 있지만 가능한 경우 표준 버전을 사용하는 것이 더 합리적 일 것입니다. 시스템에 존재하지 않는 경우 ant resolve 명령을 수행 할 때 Ivy를 통해 가져올 수있는 좋은 방법이 있습니까?표준 라이브러리의 예기치 않은 빌드 종속성을 가져 오는 방법

다른 솔루션은 컴파일 시스템에 libgfortran.a을 정적으로 연결할 수 있지만 -static RELATIVE_PATH_TO_LIBS/libgfortran.a을 추가하여 컴파일하고 링크하려고 시도했지만 라이브러리가없는 시스템에서 프로그램을 실행하면 오류가 발생합니다.

제공 할 수있는 도움을 주셔서 감사합니다.

답변

1

실행 파일 형식이 "ELF"파일 형식을 사용하면 실행 파일의 동적 섹션 표시 "readelf"를 사용할 수 있습니다 (Linux 시스템에서 기본) 인 경우 : 그것은의 목록을 포함해야

readelf -d my_executable_file 

가 모든 공유 라이브러리가 필요합니다. 실행 파일에이 라이브러리가 필요한지 여부를 확인할 수 있습니다.

이 "libgfortran.so"문제와 "libgfortran.a"나는 "libgfortran.a"을 "libxxxx.a"을 이름을 변경하고 링커 스위치를 사용하는 것이 사용할 수 있습니다 :

-Lpath_containing_libxxxx.a -lxxxx 

대신을 "-lgfortran". 이 경우에는 링커가 다른 모든 라이브러리를 정적으로 연결하려고하기 때문에 "정적"스위치를 사용하지 않을 것입니다. 링커는이 이름을 가진 동적 라이브러리가 없기 때문에 자동으로 "-lxxxx"를 정적으로 연결해야합니다.