неопределенная ссылка на `__gcov_flush ‘

Я пытаюсь так же,

http://www.linuxforums.org/forum/suse-linux/135465-gcov-g.html

Код по ссылке,

#include <iostream>

using namespace std;

void one(void);
void two(void);
void __gcov_flush(void);

int main(void)
{
int i;

while(true)
{
__gcov_flush();
cout <<  "Enter a number(1-2), 0 to exit " << endl;
cin >> i;

if ( i == 1 )
one();
else if ( i == 2 )
two();
else if ( i == 0 )
break;
else
continue;
}
return 0;
}

void one(void)
{ cout << "One is called" << endl; }

void two(void)
{ cout << "Two is called" << endl; }

но для меня это также дает,

test.cpp:(.text+0x1d9): undefined reference to `__gcov_flush()'
collect2: ld returned 1 exit status

Попробовал следующее,

g++ -fprofile-arcs test.cpp
g++ -fprofile-arcs -g test.cpp
g++ -fprofile-arcs -ftest-coverage -g test.cpp
g++ -fprofile-arcs -ftest-coverage -g test.cpp -lgcov

Я также попробовал «-lgcov» & «extern void __gcov_flush (void)», как упомянуто в ссылке выше. Я в настоящее время на Ubuntu12.04 и g ++ 4.6

Итак, я хочу знать, есть ли решение для этого или gcov_flush больше не работает.

4

Решение

void __gcov_flush();

Поскольку код скомпилирован как C ++, это объявляет о существовании C ++ функция этого имени. Функции C ++ могут быть искажены, поэтому символ (C ++) не найден в библиотеке ссылок (C), и компоновщик (по праву) жалуется на это.

Если вы объявляете функцию, объявите ее как функцию с С связь:

extern "C" void __gcov_flush();

Это должно сделать свое дело.

8

Другие решения

Я исправил эту проблему, изменив настройки.

Тестовый проект -> Настройки сборки

Поток программы прибора знак равно да

4

По вопросам рекламы [email protected]