3

出于可移植性原因,我想用 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,它是在我的服务器上从头开始编译的。安装运行顺利,我没有更改标准配置。我在旧帖子上发现编译器应该配置,但是GCC 手册--with-pic中没有提到这个标志。

问题是来自编译器还是来自我试图链接不同对象的方式?知道如何解决这个问题吗?

非常感谢您的帮助!

4

1 回答 1

3

libgfortran当您使用静态版本时,不使用-fPIC标志编译(因此它不包含位置独立代码)。

因此,您不能libfgortran(静态)链接到您的共享对象。

我建议您正确打包您的库(例如作为.debDebian 或 Ubuntu 的文件)并添加gfortran到您的包的依赖项中。

于 2012-10-20T14:23:10.960 回答