mem_malloc()とmem_free()を定義していて、それらを使用してmalloc()とfree()を置き換え、その結果、C++のnewとdeleteを置き換えたいと考えています。
私はそれらを次のように定義します:
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);
}
}
ただし、2つのリンクエラーが発生します。
[user@machine 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)複数定義されたmalloc()およびfree()エラーを取り除き、組み込みの定義ではなく、自分の定義を取得するにはどうすればよいですか?
2)どのライブラリがdlopen()とその友達を提供しますか?これが組み込まれていると思いますが、未定義です。