GCC将两个不同的对象文件合并为一个对象文件

GCC将两个不同的对象文件合并为一个对象文件,c,gcc,fortran,static-linking,gfortran,C,Gcc,Fortran,Static Linking,Gfortran,因为f.for调用了c.c中的一些函数。如何生成第三个对象文件fc.o,该文件将在以后使用另一个C源代码生成可执行文件。说明: // 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 多谢各位 我做过但没有工作的事情: # gcc/g

因为f.for调用了c.c中的一些函数。如何生成第三个对象文件fc.o,该文件将在以后使用另一个C源代码生成可执行文件。说明:

 // 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
多谢各位

我做过但没有工作的事情:

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

但它向我显示了这样的错误:未定义对“function\u name\u X”的引用。function\u name\u X在f中 我的评论是:

我有一个想法:如果a.o依赖于b.o,c.c依赖于b.o 在a.o上,那么#gcc-o exe c.c a.o b.o会起作用吗

应该有效。事实上,我在f.o中列出了所有函数:

  # ar rvs fc.a f.o c.o  
  # gcc -o executable source.c fc.a  
我发现Fortran在每个函数名的末尾都添加了下划线“\u1”,因为我从C调用这些函数时没有在末尾添加下划线,所以发生了这个错误。 根据这一点:我在生成f.o时向gfortran编译器添加了-fno下划线

 # nm f.o  
此时,末尾没有下划线。
对问题的答复:

# gfortran -c f.for -fno-underscoring
# nm f.o

ar rvs fc.a f.o c.o
将为您提供一个静态库(
fc.a
),您可以将其用作通过合并
f.o
c.o
而生成的对象文件。PSkocik:是的,我将再次尝试此解决方案,也许这是唯一的解决方案,那么您是否尝试过
ld-r f.o c.o-o-o fc.o
?(黑暗猎鹰链接)你可能问错了问题。如果在同一构建过程中生成所有这些对象文件,则不需要生成组合对象文件。您可以将所有需要的对象文件链接在一起,生成最终的可执行文件。John Bollinger->我有一个想法:如果a.o依赖于b.o,c.c依赖于a.o,那么#gcc-o exe c.c a.o b.o可以工作吗?
# gcc -o executable source.c f.o c.o  // not need fc.o