Это, вероятно, будет неловко:LD_PRELOAD и слабые ссылки минимальный пример не работает
Я использую библиотеку prelaoding в других проектах, но я не могу получить это минимальный пример работы:
weakref. ч:
void f_weak() __attribute__((weak));
weakref.c:
#include <stdio.h>
#include "weakref.h"
void f_weak(){
printf("f_weak()\n");
fflush(stdout);
}
test_weakref.c:
#include <stdio.h>
#include "weakref.h"
int main(void)
{
if (f_weak) {
printf("main: f_weak()\n");
}
else {
printf("main: ---\n");
}
fflush(stdout);
return 0;
}
Вот что я делаю:
$ gcc weakref.c -shared -fPIC -o libweakref.so
$ nm libweakref.so | grep f_weak
0000000000000708 W f_weak
$ gcc test_weakref.c -o test_weakref
$ ./test_weakref
main: ---
$ LD_PRELOAD=./libweakref.so ./test_weakref
main: ---
Ожидаемый вывод последней команды является
main: f_weak()
Что мне не хватает?
Спасибо, но моя проблема возникает, когда я использую __ атрибут __ ((слабый)). – steffen