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