我使用g ++并仔细阅读有关lto部分的内容。现在我想知道如何像icpc编译器中的-ipo-c一样进行部分链接时间优化。例如:
g++ -O2 -flto -c a.cpp
g++ -O2 -flto -c b.cpp
现在它将生成包含GIMPLE(GCC内部表示之一)的a.o和b.o.我想结合a.o和b.o来生成一个真实的对象c.o文件。这意味着只需要两个cpp文件而不是整个程序。有什么想法吗?
原因是我需要将fortran代码和c ++代码结合在一起,所以最后的链接步骤是
ifort -nofor-main -cxxlib -fexceptions f.o a.o b.o
f.o由ifort生成。因为ifort不知道GIMPLE是什么。所以最后的链接步骤将失败。
答案 0 :(得分:0)
只需使用g++
进行关联即可。
$ g++ --version
g++ (GCC) 4.8.3
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ gfortran --version
GNU Fortran (GCC) 4.8.3
Copyright (C) 2013 Free Software Foundation, Inc.
GNU Fortran comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of GNU Fortran
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING
$ cat a.cpp
#include <stdio.h>
extern "C" void foo_() { puts("foo"); }
$ cat b.cpp
#include <stdio.h>
extern "C" void bar_() { puts("bar"); }
$ cat f.f90
program f
implicit none
external foo
external bar
call foo()
call bar()
end program
$ g++ -O2 -flto -c a.cpp
$ g++ -O2 -flto -c b.cpp
$ gfortran -O2 -flto -c f.f90
$ g++ -O2 -flto a.o b.o f.o -lgfortran
$ ./a
foo
bar