我在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创建共享对象库?
答案 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
工具链。即使没有必要指定它也无害。