Использование callgrind должно работать как положено. Чтобы проверить это, я настроил простой проект, используя простую библиотеку и основную функцию Makefile:
CFLAGS=-fpic
exe:exe.o lib.so
cc -o exe exe.o lib.so
lib.so:lib.o
cc -shared lib.o -o lib.so
clean:
rm -f exe lib.so *.o
lib.c - простая библиотека, содержащая 2 функции:
#include <stdio.h>
void someOtherFunction() { printf("someOtherFunction\n"); }
void someFunction() { printf("someFunction\n"); someOtherFunction(); }
exe.c - очень простой исполняемый файл:
int someFunction();
void main() { someFunction(); }
Используйте Makefile для сборки исполняемого файла и запускайте его, используя valgrind, примерно так:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD valgrind --tool=callgrind ./exe
Если вы изучите вывод callgrind, вы найдете данные профилирования для обеих функций в общей библиотеке. Если вы не видите эти функции, возможно, вы используете нестандартную среду, которая не поддерживает эту функцию. Я использую Linux Mint 11 x64 с последними исправлениями.