gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 12:23:06 24 4
gpt4 key购买 nike

我在 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 来创建共享对象库?

最佳答案

Do I have to use -fPIC to create a shared object library?

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

近年来,许多发行版都在转向 GCC 构建默认情况下生成与位置无关的可执行文件,为了更大的利益安全性(此类可执行文件可以在 ASLR 存在的情况下运行)。

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

与位置无关的可执行文件还不是通用的,至少在几年内不会通用。同时,最好适本地使用 -fPIC,除非您知道构建命令的目标用户或读者有一个 --enable-default-pie 工具链。即使没有必要,指定它也没有坏处。

关于linux - 我是否必须使用 -fPIC 来创建共享对象库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51859001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com