将两个不同的目标文件合并为一个目标文件(GCC)

3
 // f.for is a Fortran source file
 // c.c is a C source file   
 # gfortran -c f.for            // produce f.o
 # gcc -c c.c                   // produce c.o

由于f.for调用了一些来自c.c的函数,我该如何生成第三个目标文件fc.o,以便稍后使用另一个C源代码生成可执行文件。解释:

 # gcc/gfortran? (or other) -?? f.o c.o -o fc.o
 # gcc -o executable source.c fc.o  

谢谢你

我所做的但不起作用的事情:

  # ar rvs fc.a f.o c.o  
  # gcc -o executable source.c fc.a  

但是它显示了一个错误,如下:对'function_name_X'的引用未定义。 function_name_X在f.for中。


使用命令ar rvs fc.a f.o c.o将会生成一个静态库(fc.a),你可以像使用合并了f.oc.o的目标文件一样使用它。 - undefined
PSkocik:是的,我会再试一次这个解决方案,也许它是唯一的解决方案。 - undefined
你试过ld -r f.o c.o -o fc.o这个命令了吗?(Dark Falcon的链接) - undefined
你可能问错了问题。如果你在同一个构建过程中生成所有这些目标文件,那么你不需要制作一个合并的目标文件。你只需将所有所需的目标文件链接在一起以生成最终可执行文件即可。 - undefined
我有一个想法:如果 a.o 依赖于 b.o,c.c 依赖于 a.o,那么 # gcc -o exe c.c a.o b.o 能行吗? - undefined
1个回答

2

信用:PSkocik,John Bollinger
我的评论:

我有一个想法:如果a.o依赖于b.o,c.c又依赖于a.o,那么 # gcc -o exe c.c a.o b.o 是否可行?

应该是可行的。事实上,我列出了f.o中的所有函数:

 # nm f.o  

我发现Fortran在每个函数名后面添加下划线'_',因此我从C中调用这些函数时没有添加下划线而导致了错误。根据这个问题:在生成f.o时,我向gfortran编译器添加了-fno-underscoring
# gfortran -c f.for -fno-underscoring
# nm f.o

目前,末尾没有下划线。


回答问题:

# gcc -o executable source.c f.o c.o  // not need fc.o  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接