我想使用gfortran创建一个共享库,出于可移植性的原因,将其与libgfortran的静态版本链接。不幸的是,我无法适当地链接不同的对象。我已经找到了解决类似问题的帖子,但是我不知道如何解决该问题。
我的源文件都是用-fPIC
标志编译的。当我尝试使用-shared
和-static-libgfortran
标志链接对象时,出现以下错误消息:
gfortran -shared -static-libgfortran file1.o file2.o file3.o -o "mynewlib.so"
/usr/bin/ld: ../lib64/libgfortran.a(error.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
../lib64/libgfortran.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
我使用的是gfortran 4.6.3,该服务器是我从头开始编译的。安装运行顺利,我没有更改标准配置。我在旧文章中发现编译器应配置
--with-pic
,但是GCC manual中未提及此标志。问题是来自编译器还是我尝试链接不同对象的方式?知道我该如何解决吗?
预先非常感谢您的帮助!
最佳答案
使用静态版本时,libgfortran
不会与-fPIC
标志一起编译(因此它不包含位置独立代码)。
因此,您不能将libfgortran
(静态)链接到共享对象。
我建议您正确打包您的库(例如,作为Debian或Ubuntu的.deb
文件),并将gfortran
添加到包的依赖项中。