Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compilation 用Fortran将多个源文件链接到单个库中的共享对象_Compilation_Fortran_Shared Libraries_Gfortran - Fatal编程技术网

Compilation 用Fortran将多个源文件链接到单个库中的共享对象

Compilation 用Fortran将多个源文件链接到单个库中的共享对象,compilation,fortran,shared-libraries,gfortran,Compilation,Fortran,Shared Libraries,Gfortran,我在将几个Fortran模块/子例程链接到共享库时遇到问题 问题是,我首先有一个独立的Fortran程序,一切都很顺利。这包括 main.f95 mymodule.f95 myutils.f95 但现在我正在修改一些东西,以便可以从R调用Fortran代码 所以,我放弃了主程序main.f95,我有了一个新的文件 callFromR.f95 包含将从R调用的子例程。此例程应使用模块mymodule,并且此模块依赖于myutils。 我将它们全部编译为共享对象: gfortran -share

我在将几个Fortran模块/子例程链接到共享库时遇到问题

问题是,我首先有一个独立的Fortran程序,一切都很顺利。这包括

main.f95
mymodule.f95
myutils.f95
但现在我正在修改一些东西,以便可以从R调用Fortran代码

所以,我放弃了主程序main.f95,我有了一个新的文件

callFromR.f95
包含将从R调用的子例程。此例程应使用模块
mymodule
,并且此模块依赖于
myutils
。 我将它们全部编译为共享对象:

gfortran -shared -fPIC callFromR.f95 -o callFromR.so
gfortran -shared -fPIC mymodule.f95 -o mymodule.so
gfortran -shared -fPIC myutils.f95 -o myutils.so
现在,我需要以某种方式将这三个文件合并到一个共享对象文件(而不是对象文件)中。我该怎么做


(因此,当我在R中调用
callFromR
子例程时,找不到位于
mymodule
代码中的一些子例程。)

您可以首先创建对象文件

gfortran -c -fPIC callFromR.f95 -o callFromR.o
gfortran -c -fPIC mymodule.f95 -o mymodule.o
gfortran -c -fPIC myutils.f95 -o myutils.o
然后把它们打包进图书馆

gfortran -shared  callFromR.o  mymodule.o myutils.o -o callFromR.so

什么意思是没有找到它们?您是导入所有三个.so文件还是只导入一个?这样,编译将提供对主/usr/lib/gcc/x86_64-linux-gnu/5/../../../../x86_64-linux-gnu/crt1.o:在函数
\u start':(.text+0x20):Nicht definierter Verweis auf
main“collect2:错误:ld返回了1个退出状态我刚刚忘记了
-c
标志。这里的许多问题和答案解释了这个错误。谢谢,它是用我做的假例子编译的。。稍后将测试来自R的调用是否有效