From d74df9b6637440260565200d40d4b45172391450 Mon Sep 17 00:00:00 2001 From: "peng.li24" <734991033@qq.com> Date: Mon, 14 Sep 2026 14:43:44 +0800 Subject: [PATCH 1/2] =?UTF-8?q?header-only=20=E6=94=B6=E5=B0=BE=EF=BC=9Ade?= =?UTF-8?q?ps.sh=20=E5=AE=B9=E5=BF=8D=E6=97=A0=20lib=EF=BC=9B=E5=88=A0=20r?= =?UTF-8?q?elease=20=E6=AE=8B=E7=95=99=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ci/deps.sh:依赖(blockmalloc)改为 header-only 后包里没有 lib/, 原先的 `cp "$tmp/lib/"*.so*` 直接 `cannot stat` → 改为存在才拷 - release.yml:上一轮删 find 行的替换因转义未生效,残留行会在 无 lib/ 目录时失败,本次删除 Co-Authored-By: Claude Code --- .github/workflows/release.yml | 1 - ci/deps.sh | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9e8c4fa..95c73b6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -25,7 +25,6 @@ jobs: # 只发头,不发 .so —— 消费者把实现体编进自己的 TU。 mkdir -p "$d/include" cp -R include/. "$d/include/" - find build -maxdepth 3 \( -name 'lib*.so*' -o -name 'lib*.dylib' \) -exec cp -P {} "$d/lib/" \; # 本仓无可执行产物(纯库),故不带 bin/ printf '{"abi":"%s"}\n' "$v" > "$d/abi-manifest.json" tar czf "$d.tar.gz" "$d" diff --git a/ci/deps.sh b/ci/deps.sh index bb0ec35..d71f8ff 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)是 header-only:只发头、无 lib + 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)" From 64a3cdf19157584e42d7138592824efa92ab74f5 Mon Sep 17 00:00:00 2001 From: "peng.li24" <734991033@qq.com> Date: Mon, 14 Sep 2026 14:56:08 +0800 Subject: [PATCH 2/2] =?UTF-8?q?header-only=EF=BC=9Ablockmalloc=20=E4=B9=9F?= =?UTF-8?q?=E8=B5=B0=E5=8D=95=E5=A4=B4=E6=96=87=E4=BB=B6=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 本仓自身也链接 blockmalloc,而它改成 header-only 后发布包里没有 .so → CI 链接失败(`ld: cannot find -lblockmalloc`)。 - src/slotsboxmalloc.c:加 #define BLOCKMALLOC_IMPLEMENTATION(先于 slotsboxmalloc 的宏,后者实现体调用前者) - CMakeLists:去掉 target_link_libraries(slotsboxmalloc PUBLIC blockmalloc) 验证:本地构建通过;libslotsboxmalloc.so 不再依赖 libblockmalloc。 Co-Authored-By: Claude Code --- CMakeLists.txt | 3 ++- src/slotsboxmalloc.c | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d9b213e..cc092f4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,8 @@ target_compile_definitions(slotsboxmalloc PRIVATE $<$:ENABLE_LOG> ) -target_link_libraries(slotsboxmalloc PUBLIC blockmalloc) +# 依赖 blockmalloc 走 header-only(src/slotsboxmalloc.c 里 #define *_IMPLEMENTATION), +# 故不链接它的 .so;头的搜索路径由系统 include 提供。 add_subdirectory(tutorial) diff --git a/src/slotsboxmalloc.c b/src/slotsboxmalloc.c index ec3dc7d..cedd333 100644 --- a/src/slotsboxmalloc.c +++ b/src/slotsboxmalloc.c @@ -1,2 +1,6 @@ +/* header-only:两个依赖的实现体都在本 TU 编译(不再链接 blockmalloc 的 .so)。 + * blockmalloc 必须先于 slotsboxmalloc —— 后者实现体调用前者。 */ +#define BLOCKMALLOC_IMPLEMENTATION +#include #define SLOTSBOXMALLOC_IMPLEMENTATION #include "slotsboxmalloc/slotsboxobj.h"