GCC将两个不同的对象文件合并到一个目标文件中

时间:2015-10-22 21:00:51

标签: c gcc fortran static-linking gfortran

 // 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

1 个答案:

答案 0 :(得分:1)

信用: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调用这些函数而不在末尾添加下划线,这个错误发生了。 根据此question:我在生成 f.o

时,将 -fno -incoring 添加到 gfortran 编译器
# gfortran -c f.for -fno-underscoring
# nm f.o

此时,最后没有下划线 回答问题:

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