У меня есть mem_malloc() и mem_free(), определенные для меня, и я хочу использовать их для замены malloc() и free() и, следовательно, новых и Удалить.Как переопределить malloc() в Linux для использования в C++ new
Я определяю их следующим образом:
extern "C" {
extern void *mem_malloc(size_t);
extern void mem_free(void *);
void *
malloc(size_t size) {
return mem_malloc(size);
}
void
free(void *memory) {
mem_free(memory);
}
}
Однако, я получаю две ошибки ссылку:
[[email protected] test]$ g++ -m32 -pthread main.cpp -static libmemnmf-O.a
/usr/lib/../lib/libc.a(malloc.o): In function `free':
(.text+0x153c): multiple definition of `free'
/tmp/ccD2Mgln.o:main.cpp:(.text+0x842): first defined here
/usr/lib/../lib/libc.a(malloc.o): In function `malloc':
(.text+0x3084): multiple definition of `malloc'
/tmp/ccD2Mgln.o:main.cpp:(.text+0x856): first defined here
libmemnmf-O.a(mem_debug.o): In function `mem_init_debug_routines':
mem_debug.c:(.text+0x83c): undefined reference to `dlopen'
mem_debug.c:(.text+0x89d): undefined reference to `dlsym'
mem_debug.c:(.text+0xa03): undefined reference to `dlclose'
mem_debug.c:(.text+0xa24): undefined reference to `dlclose'
mem_debug.c:(.text+0xa2e): undefined reference to `dlerror'
collect2: ld returned 1 exit status
1) Как я могу получить многократно определенный таНос() и свободный() ошибки в уходите и просто возьмите мое определение, а не встроенное в него?
2) В какой библиотеке предоставляется dlopen() и друзей? Я ожидаю, что это будет встроено, но они не определены.
новый и удалить не нужно звонить malloc. Существуют определенные семантики для их замены (реализация void * operator new (size_t size)) – 2010-12-06 14:47:06