我使用的是GCC 4.7.2版。我创建了一个包含两个文件的静态库" ctest1.cpp"和" ctest2.cpp"。
#include <stdio.h>
#include "ctest2.h"
void ctest1()
{
printf("In ctest1");
ctest2();
}
#include <stdio.h>
void ctest2()
{
printf("In ctest2");
}
头文件&#34; ctest2.h&#34;是,
void ctest2();
类似文件&#34; ctest1.h&#34;,
void ctest1();
此静态库链接到以下主文件&#34; in_test.cpp&#34;,
#include <stdio.h>
#include "ctest1.h"
using namespace std;
int main()
{
ctest1();
printf("InMain\n");
return 0;
}
我期待在提供适当的反馈并启用-flto之后,编译器应该在文件&#34; ctest1.cpp&#34;中内联函数调用ctest2()(甚至在&#34中调用ctest1() ; in_test.cpp&#34;),但它没有。以下是我遵循的编译步骤:
g++ -Wall -c -g -O3 -fprofile-generate -ftest-coverage ctest2.cpp ctest1.cpp
ar -rcsv libtest.a ctest2.o ctest1.o
g++ -Wall -g -O3 -fprofile-generate -ftest-coverage in_test.cpp -o checking libtest.a
对于训练我运行可执行文件n次,然后
g++ -Wall -c -g -O3 -flto -fwhole-program -fprofile-use ctest2.cpp ctest1.cpp
ar -rcsv libtest.a ctest2.o ctest1.o
g++ -Wall -g -O3 -flto -fwhole-program -fprofile-use in_test.cpp -o checking libtest.a
我还尝试了-fuse-linker-plugin,其中我在编译命令中给出了黄金链接器的路径,但函数没有内联。我还想提醒您,当我在没有创建静态库(带有flto和反馈)的情况下尝试此实验时,编译器会内联函数调用。在这种情况下,我只是从所有文件中创建一个可执行文件。这就是我期望它在静态库的情况下工作的原因。 有人可以告诉我这里出了什么问题吗?