gpt4 book ai didi

c - 对带有 -Wl,--wrap 的包装函数的 undefined reference

转载 作者:行者123 更新时间:2023-11-30 17:59:12 24 4
gpt4 key购买 nike

我正在使用 GCC 4.4.6-3 运行 RHEL 6.2。我正在对一些旧代码进行单元测试,并尝试使用 -Wl,--wrap=function 来包装函数。其中函数可能是诸如 closemalloc 之类的系统调用,但大多数是在我的链接对象文件中定义的其他函数。

我的测试 check_GetRequestID.c 的结果如下:

#include<stdlib.h>

int __wrap_getpid()
{
return 10;
}
int main(void)
{
int x = API_GetRequestID();
return 0;

}

API_GetRequestID() 调用 getpid(),因此我将其包装到为单元测试精心定义的内容中。

编译命令为:

gcc -m64 -pthread -DLITTLEEND -fPIC -I. -Iother/include/folders -Wall -Wformat -DFIU_ENABLE=1 -D_GNU_SOURCE -D_THREAD_SAFE -DLINUX -Wpointer-arith -pthread -c check_GetRequestID.c

gcc -m64 -pthread -DLITTLEEND -fPIC -I. -Iother/include/folders -Wall -Wformat -DFIU_ENABLE=1 -D_GNU_SOURCE -D_THREAD_SAFE -DLINUX -Wpointer-arith -pthread -L. -Lother/lib/paths -lcrypt -lutil -Wl,--wrap=getpid -Wl,--wrap=otherfunctions object.o object2.o ... -o check_GetRequestID

在链接命令中,对于调用包装函数的每个函数,我都会收到错误。如果 object2.o 中的函数调用 getpid(),那么它会抛出 object2.o__wrap_getpid 的 undefined reference 。其中包括 API_GetRequestID,这是我尝试进行单元测试的函数。

有关更改源代码或 make 文件的任何建议,这些更改将允许我正在单元测试的函数在调用 getpid() 时调用 __wrap_getpid 吗?

谢谢。

最佳答案

您也可以定义一个与 getpid() 本身具有完全相同原型(prototype)的函数。这样动态链接器将首先找到您的定义并停止在链接库中搜索它。

如果使用 getpid() 的代码驻留在动态库中,则该策略可能不起作用。

关于c - 对带有 -Wl,--wrap 的包装函数的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11640350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com