ld:找不到符号dyld_stub_binder(通常在libSystem.dylib中)

时间:2019-06-11 01:44:59

标签: macos fortran homebrew gfortran

Fortran编译器无法正常工作,我认为这是一种PATH问题。

我正在使用MacOS Mojave 10.14.5。我试图运行从别人那里得到的fortran代码。它编译良好,但运行时出现错误。首先是分割错误,所以我不确定是什么错误。但是我90%的肯定代码没有错,因为它已经由其他人运行。但是编译并运行像HelloWorld这样的简单代码就可以了。

我发现我的gfortran使用的是anaconda版本(4.8.5?),因此我将其更改为Homebrew版本(9.1.0),编辑bashrc文件。之后(我不确定到底是什么导致了问题。我尝试了很多我可以在Google上找到的事情,例如重新安装gcc。我可能弄错了路径) 我的fortran编译器甚至无法编译HelloWorld代码。

PRINT *, "Hello World!"
END                

(base) dyn-137-229-27-249:~ jjung11$ gfortran hello.f90 -o hello
ld: warning: ignoring file /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/libSystem.tbd, file was built for unsupported file format ( 0x2D 0x2D 0x2D 0x20 0x21 0x74 0x61 0x70 0x69 0x2D 0x74 0x62 0x64 0x2D 0x76 0x33 ) which is not the architecture being linked (x86_64): /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/libSystem.tbd
ld: warning: ignoring file /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/libm.tbd, file was built for unsupported file format ( 0x2D 0x2D 0x2D 0x20 0x21 0x74 0x61 0x70 0x69 0x2D 0x74 0x62 0x64 0x2D 0x76 0x33 ) which is not the architecture being linked (x86_64): /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/libm.tbd
ld: symbol dyld_stub_binder not found (normally in libSystem.dylib).  Needed to perform lazy binding to function __gfortran_set_args for architecture x86_64
collect2: error: ld returned 1 exit status

它说我需要进行延迟绑定,但是我不知道这意味着什么,即使我用谷歌搜索了它,我也无法学习该怎么做。

此外,我已经看到很多次尝试运行自己的代码的错误了:

(base) dyn-137-229-27-249:~ jjung11$ /Volumes/easystore/code/mhdread_sc ; exit;
dyld: Library not loaded: /sasbuild/local/xmac01/GNU_CC_CXX_7.1/gcc_7.1.0/lib/libgfortran.4.dylib
  Referenced from: /Volumes/easystore/code/mhdread_sc
  Reason: image not found
Abort trap: 6
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[Process completed]

我试图更改dyld路径,但未成功。实际上,我对它的含义并不了解。

我目前为自己的代码得到的错误如下:

/Volumes/easystore/code/mhdread_sc -grid ../openggcm_run/2008Jun28_002/2008Jun28_002.grid -fin ../openggcm_run/2008Jun28_002/target/2008Jun28_002.3df. -diptime 2008:06:28:10:00:0.000 -fth 2008Jun28_002.TB_GSEorbit.mhd -fsc TB.GSE.orbit -t0 3600 -tt 43200 -dt 60
 test
 3600                                                                                                                                                                                                    
At line 55 of file mhdread_sc.f
Internal Error: get_unit(): Bad internal unit KIND

实际上,即使我已经为这个问题苦苦挣扎了好几天,我还是编程的新手(Brew / Xcode / PATH / bashrc / mac),所以请对解决方案持友好态度。如果困难的话,我可能不理解。

编辑- 新错误

(base) dyn-137-229-27-249:~ jjung11$ which gfortran -a
/usr/local/bin/gfortran
(base) dyn-137-229-27-249:~ jjung11$ gfortran -o hello.f90 hello
ld: can't link with a main executable file 'hello' for architecture x86_64
collect2: error: ld returned 1 exit status

1 个答案:

答案 0 :(得分:0)

这看起来像是编译器和/或运行时库的版本冲突。

~/.bashrc中删除anaconda设置。

然后,确保Apple提供的“开发人员工具”是最新的,更新自制软件,从自制软件更新gcc / gfortran安装。如果那行不通,我想不出办法远程诊断和/或修复安装。