我使用标准__wrap_function
和__real_function
拦截-Wl,--wrap=function
的函数调用。这适用于大多数函数,如malloc
,fopen
等。但是,我无法包装这两个函数:
int connect(int, const struct sockaddr*, socklen_t)
int stat(const char*, struct stat*)
使用这些函数,链接器会抱怨__real_connect
和__real_stat
的未定义引用。
这有什么特别的原因吗? (注意:我也可以包装socket
函数)
答案 0 :(得分:1)
您可能忘记将 private void HighlightExpired (DataGridView dtg)
{
foreach (DataGridViewRow row in dtg.Rows)
{
if (row.IsNewRow) continue;
if (row.Cells["colStatus"].Value.ToString() == "Expired")
{
row.DefaultCellStyle.BackColor = Color.Red;
}
}
}
和-Wl,--wrap=connect
添加到链接行。
这对我有用:
-Wl,--wrap=stat
在我的系统上编译时。
#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/stat.h> #include <unistd.h> int __wrap_connect (int s, const struct sockaddr *addr, socklen_t len) { puts(__func__); return __real_connect(s, addr, len); } int __wrap_stat (const char *path, struct stat *buf) { puts(__func__); return __real_stat(path, buf); } int main(void) { connect(0, NULL, 0); stat("/", 0); return 0; }
但是,例如,当我离开$ uname -s -r
Linux 2.6.32-696.16.1.el6.x86_64
$ gcc --version | grep gcc
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18)
$ gcc c.c -Wl,--wrap=connect -Wl,--wrap=stat
$
时,我得到:
-Wl,--wrap=stat
答案 1 :(得分:0)
似乎错误是由于cmake问题引起的。清除cmake缓存并运行cmake。然后让所有人解决它。