Linux 我必须使用-fPIC来创建共享对象库吗?

Linux 我必须使用-fPIC来创建共享对象库吗?,linux,fortran,shared-libraries,gfortran,Linux,Fortran,Shared Libraries,Gfortran,我在Ubuntu 18.04上使用默认的gfortran 我使用以下命令创建了一个共享对象库 gfortran -Wall -g -c myMultiply.f90 gfortran -Wall -g -c mySum.f90 gfortran -shared myMultiply.o mySum.o -o libSharedLibrary001.so 请注意,我没有使用-fPIC 然后,我将该库链接到一个Fortran程序。它运行正常 所以,我的问题是是否必须使用-fPIC来创建共享对象

我在Ubuntu 18.04上使用默认的gfortran

我使用以下命令创建了一个共享对象库

gfortran -Wall -g -c myMultiply.f90
gfortran -Wall -g -c mySum.f90
gfortran -shared  myMultiply.o mySum.o  -o libSharedLibrary001.so
请注意,我没有使用-fPIC

然后,我将该库链接到一个Fortran程序。它运行正常

所以,我的问题是是否必须使用-fPIC来创建共享对象库

我必须使用-fPIC来创建共享对象库吗

这取决于您的发行版和该发行版的GCC工具链的版本 您正在使用的

近年来,许多发行版都在迁移到GCC版本 默认情况下生成位置独立的可执行文件,以实现更大的 安全性(此类可执行文件可以在存在的情况下运行)

此构建配置有效地使
-fPIC
成为编译和测试中的默认值 如果不需要,需要指定
-fno pic
。配置是 通过指定
配置
选项
--在构建GCC时启用默认饼图
来选择。 如果以详细模式(
-v
)运行
gfortran
编译并检查输出 行开始
配置为:
,您应该看到 列出的配置选项


位置独立的可执行文件还没有普及,至少在几年内不会普及。同时,最好适当地使用
-fPIC
,除非您知道构建命令的目标用户或读取器有一个
--启用默认饼图
工具链。即使不需要,也可以指定它。

您是如何使用共享库的?你能发布链接过程的详细信息吗?我使用了以下命令<代码>gfortran-Wall-c main.f90和
gfortran-o myProg main.o-L.-lSharedLibrary001
。然后,我得到了可执行文件myProg,它运行正常。谢谢。非常感谢你的澄清。我的发行版是Ubuntu18.04,gfortran的版本是(Ubuntu7.3.0-16ubuntu3)。我尝试了
gfortran-v
,但确实看到了
——启用默认饼图
。我有以下问题:仍然使用
-fPIC
创建共享对象是否是一种良好的做法?或者根本没有必要。谢谢你。嗨。最新答案