首页 > 解决方案 > 使用 dylib 时 gfortran 失败

问题描述

我正在使用 gcc 在我的 MacPro 上试验动态库 (dylib),在 macOS Big Sur 下使用 gcc 10.2.0,因为我计划在 macOS 上移植我的旧 Fortran 程序。使用 Homebrew 安装 gcc 后,我编写了以下简单示例:

函数.h

int func();

函数c

#include "func.h"

int func() {
  return 42;
}

foo.c

#include <stdio.h>
#include "func.h"

int main() {
  int i;
  i = func();
  printf("%d\n", i);
  return 0;
}

然后我按如下方式构建可执行文件:

$ gcc -c func.c
$ gcc -o func.dylib -dynamiclib -fPIC func.o
$ gcc -c foo.c
$ gcc -o foo foo.o func.dylib

希望当我运行 foo 时,我得到了预期的结果,并且看起来 dylib 工作正常:

$ foo
42
$

然后我在 Fortran 中重复了同样的练习,计划使用 gcc 的 gfortran 组件:

功能2.f90

integer function func2()
  func2 = 42
end function func2

foo2.f90

program foo2
  integer :: i
  i = func2()
  write(*, 10) i
10 format (i2)
end program foo2

我构建的可执行文件如下:

$ gfortran -c func2.f90
$ gfortran -o func2.dylib -dynamiclib -fPIC func2.o
$ gfortran -c foo2.f90
$ gfortran -o foo2 foo2.o func2.dylib

现在,当我运行程序时,我得到 0,好像 dylib 失败了:

$ foo2
 0
$

我一直在互联网上寻找可能的解释,但到目前为止找不到任何提示......
任何帮助将不胜感激!

标签: macosgcchomebrewgfortrandylib

解决方案


推荐阅读