У меня есть запрос на выполнение gcov для разделяемых библиотек.
У меня есть следующие примеры файлов кода C ++: add.C, add.h, answer.C, answer.h, testNew.C
Содержимое testNew.C выглядит следующим образом:
#include stdio.h
#include "add.h"
#include "answer.h"
#int main(int argc, char* argv[]) {
setSummand(5);
printf("5 + 7 = %d\n", add(7));
printf("And the answer is: %d\n", answer());
return 0;
}
Я скомпилировал, и объект, exe и файлы gcno были сгенерированы. Для компиляции использовались следующие команды:
gcc --coverage -fprofile-arcs -ftest-coverage -c add.C -o add.o
gcc --coverage -fprofile-arcs -ftest-coverage -c answer.C -o answer.o
gcc --coverage -fprofile-arcs -ftest-coverage -c testNew.C -o testNew.o
gcc --coverage -fprofile-arcs -ftest-coverage -c -fPIC add.C -o add.o
gcc --coverage -fprofile-arcs -ftest-coverage -c -fPIC answer.C -o answer.o
ar rcs libtestnew.a add.o answer.o
gcc --coverage -fprofile-arcs -ftest-coverage testNew.C -o testnew
gcc --coverage -fprofile-arcs -ftest-coverage -lgcov testNew.o -L. -ltestnew -o testnew
gcc -lgcov -shared add.o answer.o -o libtestnew.so
Создаются следующие файлы - add.o, answer.gcno, answer.o, libtestnew.a, testNew.gcno, testNew.o, testnew, libtestnew.so, answer.gcda, add.gcda, testNew.gcda
Когда я запускаю исполняемый файл в той же папке, что и файлы .C & .h, создаются файлы * .gcda.
Принимая во внимание, что если я копирую только библиотеку (libtestnew.so), исполняемый файл (testNew) и файлы * .gcno в другой каталог и запускаю исполняемый файл, я вижу, что программа выполняется, но файлы .gcda не создаются.
Моя цель для вышеприведенного тестирования - использовать исполняемый файл / библиотеку в моей целевой установке, в которой нет файлов исходного кода и заголовков. Я ожидаю, что это должно создать файлы * .gcda. Когда я копирую эти * .gcda файлы обратно на мой сервер, на котором есть файлы исходного кода / заголовка, и запускаю команду gcov, должно генерироваться покрытие.
Я попытался просмотреть множество материалов, относящихся к той же теме, но не получил ответа на вышеуказанный вопрос (или мое понимание неверно).
Может ли кто-нибудь помочь мне решить эту проблему? Заранее спасибо.