将 FFTW 与 gfortran 链接时出现问题(未找到体系结构的符号 x86_64)
Problems linking FFTW with gfortran (symbol(s) not found for architecture x86_64)
我在 macOS Catalina (10.15.5) 上,我已经使用 brew install fftw
安装了 FFTW。我还安装了 GCC(版本 10.2.0),它与我在下面使用的命令有符号链接。
我能够编译 运行 一个像这样的简单 C++ 程序:
g++-10 test.cpp -L/usr/local/lib -I/usr/local/include -lfftw3 -lm
但是,我必须修改环境变量 CPATH
才能使其正常工作。
我无法让一个简单的 Fortran FFTW 示例运行(我正在使用 this 一个)。我用来编译的命令是:
gfortran-10 test.f90 -L/usr/local/lib -I/usr/local/include -lfftw3 -lm
我得到的错误如下:
Undefined symbols for architecture x86_64:
"__gfortran_os_error_at", referenced from:
_MAIN__ in ccRvJaEQ.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
如果我没理解错的话,链接步骤失败了。关于如何找到可能必须传递给编译器的相关路径的任何输入都将非常有帮助。我搜索了解决方案,但找不到。但是,如果我遗漏了一些明显的东西,我深表歉意。
感谢msi_gerva's helpful hints through comments, I was able to solve the issue by downloading FFTW and compiling it to a custom directory following the installation directions。
现在,如果我像这样将库的新位置传递给 gfortran
,链接不会失败:
gfortran-10 test.f90 -L/new/path/to/lib -I/new/path/to/include -lfftw3 -lm
由于 /usr/local/
是默认安装路径,因此可能会混淆以前安装的 FFTW 库文件。
我在 macOS Catalina (10.15.5) 上,我已经使用 brew install fftw
安装了 FFTW。我还安装了 GCC(版本 10.2.0),它与我在下面使用的命令有符号链接。
我能够编译 运行 一个像这样的简单 C++ 程序:
g++-10 test.cpp -L/usr/local/lib -I/usr/local/include -lfftw3 -lm
但是,我必须修改环境变量 CPATH
才能使其正常工作。
我无法让一个简单的 Fortran FFTW 示例运行(我正在使用 this 一个)。我用来编译的命令是:
gfortran-10 test.f90 -L/usr/local/lib -I/usr/local/include -lfftw3 -lm
我得到的错误如下:
Undefined symbols for architecture x86_64:
"__gfortran_os_error_at", referenced from:
_MAIN__ in ccRvJaEQ.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
如果我没理解错的话,链接步骤失败了。关于如何找到可能必须传递给编译器的相关路径的任何输入都将非常有帮助。我搜索了解决方案,但找不到。但是,如果我遗漏了一些明显的东西,我深表歉意。
感谢msi_gerva's helpful hints through comments, I was able to solve the issue by downloading FFTW and compiling it to a custom directory following the installation directions。
现在,如果我像这样将库的新位置传递给 gfortran
,链接不会失败:
gfortran-10 test.f90 -L/new/path/to/lib -I/new/path/to/include -lfftw3 -lm
由于 /usr/local/
是默认安装路径,因此可能会混淆以前安装的 FFTW 库文件。