Linux 我必须使用-fPIC来创建共享对象库吗?
我在Ubuntu 18.04上使用默认的gfortran 我使用以下命令创建了一个共享对象库Linux 我必须使用-fPIC来创建共享对象库吗?,linux,fortran,shared-libraries,gfortran,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来创建共享对象
gfortran -Wall -g -c myMultiply.f90
gfortran -Wall -g -c mySum.f90
gfortran -shared myMultiply.o mySum.o -o libSharedLibrary001.so
请注意,我没有使用-fPIC
然后,我将该库链接到一个Fortran程序。它运行正常
所以,我的问题是是否必须使用-fPIC来创建共享对象库
我必须使用-fPIC来创建共享对象库吗
这取决于您的发行版和该发行版的GCC工具链的版本
您正在使用的
近年来,许多发行版都在迁移到GCC版本
默认情况下生成位置独立的可执行文件,以实现更大的
安全性(此类可执行文件可以在存在的情况下运行)
此构建配置有效地使-fPIC
成为编译和测试中的默认值
如果不需要,需要指定-fno pic
。配置是
通过指定配置
选项--在构建GCC时启用默认饼图
来选择。
如果以详细模式(-v
)运行gfortran
编译并检查输出
行开始配置为:
,您应该看到
列出的配置选项
位置独立的可执行文件还没有普及,至少在几年内不会普及。同时,最好适当地使用
-fPIC
,除非您知道构建命令的目标用户或读取器有一个--启用默认饼图
工具链。即使不需要,也可以指定它。您是如何使用共享库的?你能发布链接过程的详细信息吗?我使用了以下命令<代码>gfortran-Wall-c main.f90和gfortran-o myProg main.o-L.-lSharedLibrary001
。然后,我得到了可执行文件myProg,它运行正常。谢谢。非常感谢你的澄清。我的发行版是Ubuntu18.04,gfortran的版本是(Ubuntu7.3.0-16ubuntu3)。我尝试了gfortran-v
,但确实看到了——启用默认饼图
。我有以下问题:仍然使用-fPIC
创建共享对象是否是一种良好的做法?或者根本没有必要。谢谢你。嗨。最新答案