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 を使用して関数プロトタイプをチェックし、ライブラリ ヘッダー ファイルで定義された関数プロトタイプに基づいて関数引数を置き換えることができますか。