'ld: attempted static link of dynamic object' 错误解决方法
'ld: attempted static link of dynamic object' 错误分析及解决
您遇到的错误信息 'ld: attempted static link of dynamic object /opt/intel/oneapi/mpi/2021.5.1/lib/libmpifort.so'' 指出在链接过程中,您尝试将动态库文件 /opt/intel/oneapi/mpi/2021.5.1/lib/libmpifort.so` 进行静态链接,而这是不被允许的。
原因分析:
- 静态链接 是指在编译阶段将所有库文件整合到最终的可执行文件中。
- 动态链接 是指在程序运行时才加载所需的库文件。
您遇到的错误是由于您在使用 Intel Fortran 编译器 (ifort) 时,使用了 -static 选项,该选项强制进行静态链接。然而, /opt/intel/oneapi/mpi/2021.5.1/lib/libmpifort.so 是一个动态库文件,不能进行静态链接。
解决方案:
- 移除
-static选项: 最简单的解决方法是从编译命令中移除-static选项,以便使用动态链接。 - 指定链接库路径: 确保链接器能够找到动态库文件
libmpifort.so。您可以使用-L选项指定库文件所在的目录,例如:-L/opt/intel/oneapi/mpi/2021.5.1/lib
修改后的编译命令示例:
/opt/intel/oneapi/compiler/2022.0.2/linux/bin/intel64/ifort -I/opt/intel/oneapi/mpi/2021.5.1/include -132 -fpp -pthread -L/opt/intel/oneapi/mpi/2021.5.1/lib CMakeFiles/cmTC_0f49a.dir/test_mpi.f90.o -o cmTC_0f49a /opt/intel/oneapi/mpi/2021.5.1/lib/libmpifort.so /opt/intel/oneapi/mpi/2021.5.1/lib/release/libmpi.so /usr/lib/x86_64-linux-gnu/libdl.so /usr/lib/x86_64-linux-gnu/librt.so /usr/lib/x86_64-linux-gnu/libpthread.so
通过以上修改,您应该能够解决 'ld: attempted static link of dynamic object' 错误,并成功编译您的 Fortran 代码。
原文地址: http://www.cveoy.top/t/topic/fClp 著作权归作者所有。请勿转载和采集!