2014-09-25 8 views
1

Я столкнулся с ошибкой при попытке запустить Bayescan 2.0.Не удается ли несколько версий gcc запутать dylib (libgcc_s.1.dylib) и предотвратить запуск двоичных файлов?

Это на Mac OS X 10.9.2 Mavericks. Когда вы просто вызываете программу без входного файла, меню справки отображается нормально.

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 ссылаются на «libgcc_s.1.dylib», но я не знаю, как исправить. Я попытался установить различные версии gcc и gfortran, но наличие нескольких установок кажется вообще плохим. Установлены как Macports, так и Homebrew.

Возможно, связанная с этим проблема установки связана с пакетом R-forge с сообщением об ошибке «символ не найден», который также ссылается на libgcc_s.1.dylib. К сожалению, я понятия не имею, что это dylib есть, как искать символы, ссылки правильные версии GCC, и т.д.

Моя активная НКУ версия, кажется, LLVM 5.1:

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 :

gfortran --version 

GNU Fortran (GCC) 4.9.0 

Однако похоже, что несколько gcc libs могут существовать?

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 версии в/Opt/местные/бен:

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, вызывающие эту ошибку? Любые другие идеи? Любая помощь приветствуется! Извините, я больше не могу описать мою настройку fortran.

EDIT: Вот родственное сообщение: https://github.com/mash/node-imagemagick-native/issues/17

EDIT # 2: Эта ошибка вызвало несколько программ. Чтобы проиллюстрировать это, вот сообщение об ошибке при попытке запустить программу GENEPOP:

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 

Если я временно маскирует libgcc_s.1.dylib ...

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 

И, наконец, если я маскировать цельные/usr/local directory, это решает проблему для некоторых программ (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

Похоже, ваш билд BayeScan2.1_macos64bits был связан с более новой, чем libgcc копии у вас есть на /usr/local/lib/libgcc_s.1.dylib

Как был /usr/local/lib/libgomp.1.dylib установлен в вашей системе? (Может быть, он пришел вместе для езды с установкой GCC от доморощенного/MacPorts/что-то еще?)

Я заметил, что после установки 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 и выше, вы можете подумать о перестройке BayeScan/genepop с компилятором clang вместо GCC. Построение с помощью clang могло бы обойти проблему предварительно построенной зависимости BayeScan от нового и улучшенного libstdC++, который, кажется, вызывает проблемы здесь (теперь, когда устаревший libstdC++, поставляемый с OS X 10.9+, как представляется, пропускает важные символы).

К сожалению, это похоже на то, что версия запаса clang, предоставляемая инструментами командной строки Xcode, не поддерживает -fopenmp на момент написания этой статьи, в которой вам необходимо построить зависимую от BayeScan libgomp.

Так строительство libgomp вероятно требует установку лязга-OMP на данный момент и использовать его вместо Apple в наличии звон: http://clang-omp.github.io/

+0

Спасибо Билл! Связь с домашним каталогом сделала трюк. Не совсем понятно, как создавать программы с помощью компилятора clang/clang-omp? – Paul

+0

О clang-omp, подумал, что было бы проще продолжить использование копии этих инструментов на основе GCC и в конечном итоге переключиться на clang/LLVM после запуска инструментов командной строки Apple, включая компилятор clang, который поддерживает параметр -fopenmp , Как только это произойдет, должно быть возможно легко построить BayeScan без установки GCC через MacPorts или homebrew. –

 Смежные вопросы

  • Нет связанных вопросов^_^