2014-09-25 5 views
1

Bayescan 2.0을 실행하는 동안 오류가 발생했습니다.여러 gcc 버전이 dylib (libgcc_s.1.dylib)를 혼동하고 바이너리가 실행되지 않도록합니까?

이것은 Mac OS X 10.9.2 매버릭스에 있습니다. 입력 파일이없는 프로그램을 호출하면 도움말 메뉴가 정상적으로 표시됩니다.

인수로 입력 파일과 프로그램을 실행하지만
BayeScan2.1_macos64bits --help 

...

BayeScan2.1_macos64bits test.input 

이 오류 표시 :

dyld: lazy symbol binding failed: Symbol not found: ___emutls_get_address 
    Referenced from: /usr/local/lib/libgomp.1.dylib 
    Expected in: /usr/local/lib/libgcc_s.1.dylib 

dyld: Symbol not found: ___emutls_get_address 
    Referenced from: /usr/local/lib/libgomp.1.dylib 
    Expected in: /usr/local/lib/libgcc_s.1.dylib 

Trace/BPT trap: 5 

이 프로그램은 과거에 완벽하게 정상적으로 실행했다. 내 직감은 잘못된 gcc libs가 'libgcc_s.1.dylib'에서 참조되지만 문제를 해결할 단서가 없다는 것입니다. gcc와 gfortran의 다양한 버전을 설치하려했지만, 여러 번 설치하는 것은 일반적으로 좋지 않은 것처럼 보입니다. Macport와 Homebrew 모두 설치되어 있습니다.

another 아마도 libgcc_s.1.dylib를 참조하는 '기호를 찾을 수 없음'오류 메시지와 함께 R-forge 패키지와 관련된 설치 문제가있었습니다.

gcc --version 

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn) 
Target: x86_64-apple-darwin13.1.0 
Thread model: posix 

그리고 gfortran 버전은 4.9입니다 : 불행하게도, 난

내 활성 GCC 버전은 LLVM 5.1 것 같다 등이 dylib가 문자를 검색하는 방법, 어떤 단서가 없다 GCC의 올바른 버전 링크 :

gfortran --version 

GNU Fortran (GCC) 4.9.0 

그러나 여러 gcc 라이브러리가 존재할 수 있습니다.

ls -1 /opt/local/bin/*gfortran*; ls -1 /opt/local/bin/*gcc* 

/opt/local/bin/gfortran-mp-4.7* 
/opt/local/bin/gfortran-mp-4.8* 
/opt/local/bin/x86_64-apple-darwin13-gfortran-mp-4.7* 
/opt/local/bin/x86_64-apple-darwin13-gfortran-mp-4.8* 
/opt/local/bin/gcc-ar-mp-4.7* 
/opt/local/bin/gcc-ar-mp-4.8* 
/opt/local/bin/gcc-mp-4.7* 
/opt/local/bin/gcc-mp-4.8* 
/opt/local/bin/gcc-nm-mp-4.7* 
/opt/local/bin/gcc-nm-mp-4.8* 
/opt/local/bin/gcc-ranlib-mp-4.7* 
/opt/local/bin/gcc-ranlib-mp-4.8* 
/opt/local/bin/x86_64-apple-darwin13-gcc-4.7.3* 
/opt/local/bin/x86_64-apple-darwin13-gcc-4.8.3* 
/opt/local/bin/x86_64-apple-darwin13-gcc-ar-mp-4.7* 
/opt/local/bin/x86_64-apple-darwin13-gcc-ar-mp-4.8* 
/opt/local/bin/x86_64-apple-darwin13-gcc-mp-4.7* 
/opt/local/bin/x86_64-apple-darwin13-gcc-mp-4.8* 
/opt/local/bin/x86_64-apple-darwin13-gcc-nm-mp-4.7* 
/opt/local/bin/x86_64-apple-darwin13-gcc-nm-mp-4.8* 
/opt/local/bin/x86_64-apple-darwin13-gcc-ranlib-mp-4.7* 
/opt/local/bin/x86_64-apple-darwin13-gcc-ranlib-mp-4.8* 

이 오류의 원인 GCC/gfortran의 여러 버전 위치 :

ls -1 /usr/local/lib/gcc 

i686-apple-darwin8/ 
i686-apple-darwin8.8.1/ 
powerpc-apple-darwin8/ 
x86_64-apple-darwin13.0.0/ 

또한,/옵션/지방/빈에서 다른 GCC/gfortran 버전처럼 보인다? 다른 아이디어? 도움을 환영합니다! 죄송합니다. 포트란 설정에 대해 더 이상 설명 할 수 없습니다.

편집 : 가 여기에 관련 게시물 : https://github.com/mash/node-imagemagick-native/issues/17

편집 # 2 : 이 오류는 여러 프로그램에 의해 유발된다. 나는 일시적으로 libgcc_s.1.dylib 마스크 경우

Genepop 

Genepop version 4.2.1 

Unable to open file genepop.txt 
Unable to open file dyld: lazy symbol binding failed: Symbol not found: ___emutls_get_address 
    Referenced from: /usr/local/lib/libstdc++.6.dylib 
    Expected in: /usr/local/lib/libgcc_s.1.dylib 

dyld: Symbol not found: ___emutls_get_address 
    Referenced from: /usr/local/lib/libstdc++.6.dylib 
    Expected in: /usr/local/lib/libgcc_s.1.dylib 

Trace/BPT trap: 5 

...

sudo mv /usr/local/lib/libgcc_s.1.dylib /usr/local/lib/libgcc_s.1.dylibTEMP 
Genepop 

Genepop version 4.2.1 

Unable to open file genepop.txt 
Unable to open file dyld: lazy symbol binding failed: Symbol not found: ___emutls_get_address 
    Referenced from: /usr/local/lib/libstdc++.6.dylib 
    Expected in: /usr/lib/libSystem.B.dylib 

dyld: Symbol not found: ___emutls_get_address 
    Referenced from: /usr/local/lib/libstdc++.6.dylib 
    Expected in: /usr/lib/libSystem.B.dylib 

Trace/BPT trap: 5 

그리고 마지막으로 내가 전체를 마스크 경우/: 설명하기 위해, 여기에 프로그램 Genepop을 실행하는 동안 오류 메시지는 usr/local 디렉토리에 설치하면 일부 프로그램 (Genepop)의 문제점을 해결할 수 있습니다! 하지만 다른 사람 (Bayescan)에 대한 :

sudo mv /usr/local /usr/localTEMP 

BayeScan2.1_macos64bits test.input 

dyld: Library not loaded: /usr/local/lib/libgomp.1.dylib 
    Referenced from: /Users/maierpa/programs/Bayescan 
    Reason: image not found 
Trace/BPT trap: 5 

답변

1

는 /usr/local/lib/libgcc_s.1에있는 사본보다 새로운 관하여 libgcc에 링크 된 BayeScan2.1_macos64bits의 빌드처럼 보인다.dylib

/usr/local/lib/libgomp.1.dylib는 시스템에 어떻게 설치 되었습니까? (아마 다른 사제/MacPorts를가/일에서 GCC의 설치와 함께 타고 함께 온?) 나는 사제를 통해 GCC 4.8을 설치 한 후, 여기 libgomp.1.dylib의 사본이 나타났습니다

:

/usr/local/Cellar/gcc/4.8.3_1/lib/gcc/x86_64-apple-darwin13.2.0/4.8.3/libgomp.1.dylib

내 시스템 그리고 사전 구축 BayeScan2.1_macos64bits 바이너리 실행을 내가 그 디렉토리 검색을 말한다면 :에 부드러운 경험을 위해

DYLD_LIBRARY_PATH=/usr/local/Cellar/gcc/4.8.3_1/lib/gcc/x86_64-apple-darwin13.2.0/4.8.3/ ./BayeScan2.1_macos64bits

을 OS X 10.9 이상에서는 GCC 대신 clang 컴파일러로 BayeScan/genepop을 재구성하는 것을 고려할 수 있습니다. clang으로 빌드하면 새롭게 개선 된 libstdC++에 대한 사전 작성된 BayeScan의 종속성 문제를 피할 수 있습니다.이 문제는 여기에서 문제를 일으키는 것으로 보입니다 (이제는 OS X 10.9 이상에서 제공되는 오래된 libstdC++에 중요한 기호가 누락 된 것 같습니다).

불행히도 Xcode 명령 줄 도구와 함께 제공되는 clang의 주식 버전은이 문서 작성 시점에서 -fopenmp을 지원하지 않으므로 BayeScan 종속성 libgomp을 빌드해야합니다. http://clang-omp.github.io/

+0

감사 빌 :

그래서 구축 libgomp 아마 지금은 그 소리-OMP를 설치하고 애플의 주식 연타 대신에 그것을 사용해야합니다! homebrew 디렉토리에 연결하는 것이 트릭을 만들었습니다. 비록 clang/clang-omp 컴파일러로 프로그램을 빌드하는 방법에 대해 완전히 명확하지는 않습니까? – Paul

+0

clang-omp에 관해서는 두 번째 생각에서 지금은이 도구의 GCC 내장 복사본을 계속 사용하는 것이 더 쉬울 것이며 결국 Apple의 명령 줄 도구가 -fopenmp 옵션을 지원하는 clang 컴파일러를 시작하면 clang/LLVM으로 전환하십시오 . 그런 일이 발생하면 MacPorts 또는 homebrew를 통해 GCC를 설치하지 않고 BayeScan을 쉽게 구축 할 수 있어야합니다. –