ibv_modify_qp 函数对于不同版本的库有 2 个不同的签名。这两个库都将头文件安装在同一位置。以下是2个版本。
int ibv_modify_qp(struct ibv_qp *qp, struct ibv_qp_attr *attr,
int attr_mask);
int ibv_modify_qp(struct ibv_qp *qp, struct ibv_qp_attr *attr,
enum ibv_qp_attr_mask attr_mask);
在我的库中,我将驱动程序特定函数的指针传递给 ibv_context_ops 结构。
/*ibv_context_ops field contains function pointers to driver specific functions*/
static struct ibv_context_ops c4iw_ctx_ops = {
.modify_qp = c4iw_modify_qp,
}
int c4iw_modify_qp(struct ibv_qp *ibqp, struct ibv_qp_attr *attr,
int attr_mask);
因此,当原型匹配时,我看不到任何警告,但是当原型不同时,将生成警告。现在我正在使用 CFLAGS 进行有条件的编译,如下所示。
#ifdef IBV_VER2
int c4iw_modify_qp(struct ibv_qp *ibqp, struct ibv_qp_attr *attr,
int attr_mask);
#else
int c4iw_modify_qp(struct ibv_qp *ibqp, struct ibv_qp_attr *attr,
enum ibv_qp_attr_mask attr_mask);
#endif
无论如何我可以使用 gnu automake 来检查函数原型并根据库头文件中定义的函数原型替换函数参数。