我是否必须使用 -fPIC 来创建共享对象库?
Do I have to use -fPIC to create a shared object library?
我在 Ubuntu 18.04 上使用默认的 gfort运行。
我使用以下命令创建了一个共享对象库。
gfortran -Wall -g -c myMultiply.f90
gfortran -Wall -g -c mySum.f90
gfortran -shared myMultiply.o mySum.o -o libSharedLibrary001.so
请注意,我没有使用 -fPIC。
然后,我将库链接到 Fort运行 程序。它 运行 正确。
所以,我的问题是我是否必须使用-fPIC 来创建共享对象库?
Do I have to use -fPIC to create a shared object library?
这取决于您的发行版和该发行版的 GCC 工具链的版本
你正在使用。
近年来许多发行版都在转向 GCC 构建
默认情况下生成与位置无关的可执行文件,为了更大的利益
安全性(此类可执行文件可以 运行 在 ASLR 存在的情况下)。
此构建配置有效地使 -fPIC
成为编译中的默认值,并且
如果您不想要它,则需要您指定 -fno-pic
。配置是
通过在构建 GCC 时指定 configure
选项 --enable-default-pie
选择。
如果您 运行 在详细模式下进行 gfortran
编译 (-v
) 并检查输出
从 Configured with:
开始的行,您应该在其中看到 --enable-default-pie
列出的配置选项。
与位置无关的可执行文件还不是通用的,至少在几年内不会。同时,最好适当地使用 -fPIC
,除非您知道构建命令的目标用户或 reader(s) 有一个 --enable-default-pie
工具链。没必要指定也无妨。
我在 Ubuntu 18.04 上使用默认的 gfort运行。
我使用以下命令创建了一个共享对象库。
gfortran -Wall -g -c myMultiply.f90
gfortran -Wall -g -c mySum.f90
gfortran -shared myMultiply.o mySum.o -o libSharedLibrary001.so
请注意,我没有使用 -fPIC。
然后,我将库链接到 Fort运行 程序。它 运行 正确。
所以,我的问题是我是否必须使用-fPIC 来创建共享对象库?
Do I have to use -fPIC to create a shared object library?
这取决于您的发行版和该发行版的 GCC 工具链的版本 你正在使用。
近年来许多发行版都在转向 GCC 构建 默认情况下生成与位置无关的可执行文件,为了更大的利益 安全性(此类可执行文件可以 运行 在 ASLR 存在的情况下)。
此构建配置有效地使 -fPIC
成为编译中的默认值,并且
如果您不想要它,则需要您指定 -fno-pic
。配置是
通过在构建 GCC 时指定 configure
选项 --enable-default-pie
选择。
如果您 运行 在详细模式下进行 gfortran
编译 (-v
) 并检查输出
从 Configured with:
开始的行,您应该在其中看到 --enable-default-pie
列出的配置选项。
与位置无关的可执行文件还不是通用的,至少在几年内不会。同时,最好适当地使用 -fPIC
,除非您知道构建命令的目标用户或 reader(s) 有一个 --enable-default-pie
工具链。没必要指定也无妨。