💬

【C 言語】【Zig】【PHP FFI】nghttp3 のバージョン番号を表示する

2024/04/26に公開

Debian では libnghttp3-dev パッケージが用意されているが、システムにインストールせずにローカルでビルドしたものを利用する

git clone -b v1.2.0 https://github.com/ngtcp2/nghttp3
cd nghttp3
git submodule update --init
autoreconf -fi
./configure --prefix=$HOME/nghttp3
make
make install

C のプログラムコードを用意する

#include <stdio.h>
#include <nghttp3/nghttp3.h>

int main() {
  nghttp3_info *info = nghttp3_version(0);
  printf("%s\n", info->version_str);

  return 0;
}

コンパイルは次のとおり

zig run test.c -lc -lnghttp3 -L$HOME/nghttp3/lib -I$HOME/nghttp3/include

Zig のコードは次のとおり

const std = @import("std");
const print = std.debug.print;
const nghttp3 = @cImport({
    @cInclude("nghttp3/nghttp3.h");
});

pub fn main() !void {
  const info = nghttp3.nghttp3_version(0);
  print("{s}\n", .{info.*.version_str});
}

コンパイルは次のとおり

zig run test.zig -lc -lnghttp3 -L$HOME/nghttp3/lib -I$HOME/nghttp3/include

最後に PHP FFI のコード

<?php

$ffi = FFI::cdef("
  typedef struct nghttp3_info {
    int age;
    int version_num;
    const char *version_str;
  } nghttp3_info;

  nghttp3_info *nghttp3_version(int least_version);
",
// "/usr/lib/x86_64-linux-gnu/libnghttp3.so"
"lib/libnghttp3.so"
);


$info = $ffi->nghttp3_version(0);

var_dump(
  $info->version_str
);

Discussion