我是否必须使用-fPIC创建共享对象库?

时间:2018-08-15 12:47:12

标签: 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创建共享对象库?

1 个答案:

答案 0 :(得分:1)

  

是否必须使用-fPIC创建共享对象库?

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

近年来,许多发行版已转移到GCC版本, 默认情况下,生成与位置无关的可执行文件,以便更大的利益 安全性(此类可执行文件可以在ASLR的情况下运行)。

此构建配置有效地使-fPIC成为编译时的默认设置, 如果不需要,则需要您指定-fno-pic。配置是 在构建GCC时通过指定configure选项--enable-default-pie进行选择。 如果您以详细模式(gfortran)运行-v编译并检查输出 从Configured with:开始的行中,您应该在其中看到--enable-default-pie 列出的配置选项。

与位置无关的可执行文件还不是通用的,并且至少要持续数年。同时,最好适当地使用-fPIC,除非您知道构建命令的目标用户或读者具有--enable-default-pie工具链。即使没有必要指定它也无害。