C -Wl,-wrap=符号不';我不能为共享库工作

C -Wl,-wrap=符号不';我不能为共享库工作,c,linux,gcc,linker,ld,C,Linux,Gcc,Linker,Ld,我尝试使用GNU链接器特性“-wrap=symbol”拦截大型应用程序对malloc()的所有调用。该应用程序使用了一大堆共享库 链接器阶段如下所示: extern "C" { void * __real_malloc(size_t c); void * __wrap_malloc(size_t c) { printf("my wrapper"); return __real_malloc (c); } } g++-Wl,-wrap=malloc-o samegame.obj

我尝试使用GNU链接器特性“-wrap=symbol”拦截大型应用程序对malloc()的所有调用。该应用程序使用了一大堆共享库

链接器阶段如下所示:

extern "C" {
void *
__real_malloc(size_t c);

void *
__wrap_malloc(size_t c)
{
    printf("my wrapper");
    return __real_malloc (c);
}
}
g++-Wl,-wrap=malloc-o samegame.obj/main.o.obj/qrc_samegame.o-lQt5Quick-lQt5Qml-lQt5Network-lQt5Gui-lQt5Core-lGL-lpthread

我的包装是这样的:

extern "C" {
void *
__real_malloc(size_t c);

void *
__wrap_malloc(size_t c)
{
    printf("my wrapper");
    return __real_malloc (c);
}
}
我的问题是,我看到我的包装被直接从我的应用程序调用malloc。在其中一个共享库中完成的malloc调用没有挂钩


我做错什么了吗?

您的解决方案无法与共享库一起使用

但你可以这样做:

extern "C" {
void *
__real_malloc(size_t c);

void *
__wrap_malloc(size_t c)
{
    printf("my wrapper");
    return __real_malloc (c);
}
}
将以下代码放入名为
malloc.c

#include <stdlib.h>
#include <stdio.h>

void *__libc_malloc(size_t size);

void *malloc(size_t size)
{
    printf("malloc'ing %zu bytes\n", size);
    return __libc_malloc(size);
}

这可能只适用于静态库。似乎如此。这是我问题的主要方向。我需要一个用于
open
,而
\uu libc\u open
不起作用。我发现包括malloc在内的大多数函数都可以用两个初始的Undercroed
int\uu open(const char*pathname,int标志)调用