[英]Error when trying to link to a shared library I created using LD_PRELOAD
我正在嘗試通過鏈接 Linux 上的共享庫來測試是否可以覆蓋 glibc 的 malloc 接口。 我還沒有 malloc 功能的詳細信息。
因此,我創建了一個nullmalloc.cpp
,它具有 malloc 所需的替換,但都返回 null。 代碼如下所示:
# include <cstddef>
void* malloc(size_t size) { return 0; }
void* calloc(size_t n, size_t size) { return 0; }
void free(void* ptr) { return; }
void* realloc(void* ptr, size_t size) { return 0; }
void* valloc(size_t size) { return 0; }
void* memalign(size_t align, size_t s) { return 0; }
void cfree(void* ptr) { return; }
void* aligned_alloc(size_t align, size_t s) { return 0; }
void* pvalloc(size_t size) { return 0; }
struct mallinfo mallinfo(void);
int mallopt(int cmd, int value) { return 0; }
然后我嘗試通過以下命令創建 cpp 文件的共享庫:
gcc -Wall -fPIC -g -c nullmalloc.cpp // creates nullmalloc.o
gcc -shared -Wl,-soname,nullmalloc.so -o nullmalloc.so nullmalloc.o // creates nullmalloc.so
當我使用 LD_PRELOAD 將nullmalloc.so
鏈接到我編寫的名為test.cpp
的測試代碼時,我收到一條錯誤消息,提示找不到.so 文件。
我與 LD_PRELOAD 一起使用的命令是這樣的:
g++ -g test.cpp -o test.o -std=c++11 LD_PRELOAD=/home/nullmalloc/nullmalloc.so
我得到的錯誤是:
g++: error: LD_PRELOAD=/home/nullmalloc/nullmalloc.so: No such file or directory
我很困惑,因為當我使用ls
命令時存在nullmalloc.so
文件。
[root@a nullmalloc]$ ls
nullmalloc.cpp nullmalloc.o nullmalloc.so test.cpp
我才開始研究 malloc、linux 和共享庫,所以我不確定我在哪里犯了錯誤。 有人可以就從哪里開始修復提供建議嗎?
謝謝你。
我不知道如何添加編譯器標志,但您可以使其工作如下。
像往常一樣編譯測試:
g++ -Wall -g test.cpp -o test -std=c++11
像這樣調用它:
LD_PRELOAD=/home/nullmalloc/nullmalloc.so ./test
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.