【问题标题】:Do I have to use -fPIC to create a shared object library?我必须使用 -fPIC 来创建共享对象库吗?
【发布时间】:2018-08-15 12:47:12
【问题描述】:

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

【问题讨论】:

  • 您是如何使用共享库的?您能否发布有关该链接过程的详细信息?
  • 我使用了以下命令。 gfortran -Wall -c main.f90gfortran -o myProg main.o -L. -lSharedLibrary001。然后,我得到了可执行文件 myProg 并且它运行正确。谢谢。

标签: linux fortran shared-libraries gfortran


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 非常感谢您的澄清。我的发行版是 Ubuntu 18.04,gfortran 的版本是(Ubuntu 7.3.0-16ubuntu3)。我试过gfortran -v,确实看到了--enable-default-pie。我有以下问题:仍然使用-fPIC 创建共享对象是一种好习惯吗?或者,根本没有必要。谢谢。
  • @rltang 嗨。更新答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-17
相关资源
最近更新 更多