Я пытаюсь обернуть математические функции GLIB C, включая суммирование, деление, умножение, косинус, логарифм и др. c. Я нашел похожий пост здесь .
Я создал сценарий-оболочку для функции log
, в которой что-то печатает перед расчетом. Примерно так для функции log
:
#include <dlfcn.h>
#include <stdio.h>
#include <math.h>
static double (*real_log)(double dbl);
double log(double dbl)
{
printf("value is %0.16f\n" , dbl);
real_log = dlsym(RTLD_NEXT, "log");
real_log(dbl);
}
И тестовый файл выглядит примерно так:
#include <stdio.h>
#include <math.h>
int main () {
double var;
var = log(2.7);
printf("log is equal to %0.16f\n" , var);
return 0;
}
Я перекомпилировал оболочку для создания общей библиотеки этим команда: gcc -fPIC -shared -o libpreload.so wrapper.c -ldl
.
Я скомпилировал тестовый файл: gcc -fno-builtin-log test.c -o test -lm
.
Затем я запускаю свой тестовый скрипт, используя: LD_PRELOAD=/path/to/libpreload.so ./test
Теперь выводится
value is 2.7000000000000002
log is equal to 0.0000000000000000
log
возвращает нулевое значение, в то время как я ожидаю получить реальный расчет следующим образом:
value is 2.7000000000000002
log is equal to 0.9932517730102834
Я новичок в программировании C, а также Glib c функциональность. Буду признателен за любые идеи.