GCC将两个不同的对象文件合并为一个对象文件
因为f.for调用了c.c中的一些函数。如何生成第三个对象文件fc.o,该文件将在以后使用另一个C源代码生成可执行文件。说明: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 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