2

我 man g++ 并仔细阅读了 lto 部分。现在我想知道如何像 icpc 编译器中的 -ipo-c 一样进行部分链接时间优化。例如:

g++ -O2 -flto -c a.cpp
g++ -O2 -flto -c b.cpp

现在它将生成包含 GIMPLE(GCC 的内部表示之一)的 ao 和 bo。我想结合 ao 和 bo 来生成一个真实的对象 co 文件。这意味着只是超过两个 cpp 文件而不是整个程序。任何想法?

原因是我需要将fortran代码和c++代码结合在一起,所以最后的链接步骤是

ifort -nofor-main -cxxlib -fexceptions f.o a.o b.o

fo 由 ifort 生成。因为 ifort 不知道 GIMPLE 是什么。所以最后的链接步骤将失败。

4

1 回答 1

1

只是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
于 2014-08-08T23:38:41.573 回答