💬
【C 言語】【Zig】【PHP FFI】nghttp3 のバージョン番号を表示する
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