From eeb7e651170c80da984d7f676bddca2a199ab9c8 Mon Sep 17 00:00:00 2001 From: "peng.li24" <734991033@qq.com> Date: Mon, 14 Sep 2026 12:56:28 +0800 Subject: [PATCH 1/2] =?UTF-8?q?header-only=EF=BC=9Ablockmalloc=20/=20slots?= =?UTF-8?q?boxmalloc=20=E8=B5=B0=E5=8D=95=E5=A4=B4=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 两库都支持单头文件(#define *_IMPLEMENTATION),改为把实现体编进本仓 TU,不再链接它们的 .so: - src/kvspace.c:定义 BLOCKMALLOC_IMPLEMENTATION / SLOTSBOXMALLOC_IMPLEMENTATION 后再 include(blockmalloc 必须先于 slotsboxmalloc,后者实现体调用前者) - CMakeLists:去掉 target_link_libraries(kvspace-c PUBLIC blockmalloc slotsboxmalloc) - ci/deps.sh:依赖包无 lib/ 时跳过(两库现在只发头) 验证:libkvspace-c.so 不再依赖 libblockmalloc/libslotsboxmalloc; ctest 3/3 通过。 Co-Authored-By: Claude Code --- CMakeLists.txt | 5 ++--- ci/deps.sh | 5 +++-- src/kvspace.c | 8 ++++++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 566bba2..a1faa64 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,9 +20,8 @@ set_target_properties(kvspace-c PROPERTIES ) # 无公共头:内部头在 src/(kvspace_shm.h、xvalue.h),权威 ABI 头在 kvspace 仓库。 -target_link_libraries(kvspace-c - PUBLIC blockmalloc slotsboxmalloc -) +# 两个依赖库走 header-only(src/kvspace.c 里 #define *_IMPLEMENTATION),故不链接 .so; +# 头的搜索路径由系统 include(/usr/include/blockmalloc、/usr/include/slotsboxmalloc)提供。 # 后端库固定装到 dispatch 前端 dlopen 的目录 /lib/kvspace。 # 默认 prefix=/usr(对齐 ci/deps.sh 的 /usr/lib/kvspace),而非 /usr/local。 diff --git a/ci/deps.sh b/ci/deps.sh index bb0ec35..28931c3 100755 --- a/ci/deps.sh +++ b/ci/deps.sh @@ -8,7 +8,8 @@ for repo in $(jq -r 'keys[]' "$ROOT/deps.json"); do gh release download "$ver" -R "array2d/$repo" -p "${repo}-abi-*-linux-x86_64.tar.gz" -D "$tmp" tar xzf "$tmp"/*.tar.gz -C "$tmp" --strip-components=1 if [ -d "$tmp/include" ]; then sudo cp -r "$tmp/include/"* /usr/include/; fi - sudo cp "$tmp/lib/"*.so* /usr/lib/ + # blockmalloc / slotsboxmalloc 是 header-only:只发头、无 lib(实现体编进本仓 TU) + if [ -d "$tmp/lib" ]; then sudo cp "$tmp/lib/"*.so* /usr/lib/; fi rm -rf "$tmp" done -echo "✅ ABI deps → /usr/lib + /usr/include" +echo "✅ ABI deps → /usr/include(+ 有 lib 的仓装 /usr/lib)" diff --git a/src/kvspace.c b/src/kvspace.c index 942e107..f1c13b7 100644 --- a/src/kvspace.c +++ b/src/kvspace.c @@ -3,9 +3,13 @@ */ #define _GNU_SOURCE -#include "kvspace_shm.h" -#include "slotsboxmalloc/slotsboxobj.h" +/* header-only 模式:两个依赖库的实现体在本 TU 编译,不再链接它们的 .so。 + * blockmalloc 必须先于 slotsboxmalloc(后者在其实现体里调用前者)。 */ +#define BLOCKMALLOC_IMPLEMENTATION #include +#define SLOTSBOXMALLOC_IMPLEMENTATION +#include "slotsboxmalloc/slotsboxobj.h" +#include "kvspace_shm.h" #include #include #include From 4684b71d7ef7d27ecf2730eeb483405aab3f26b4 Mon Sep 17 00:00:00 2001 From: "peng.li24" <734991033@qq.com> Date: Mon, 14 Sep 2026 15:05:24 +0800 Subject: [PATCH 2/2] =?UTF-8?q?ci:=20=E9=87=8D=E8=B7=91=EF=BC=88blockmallo?= =?UTF-8?q?c/slotsboxmalloc=20=E7=9A=84=20header-only=20release=20?= =?UTF-8?q?=E5=B7=B2=E5=B0=B1=E4=BD=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit