Build fails with MZ_PPMD enabled: relocation R_X86_64_PC32 cannot be used against symbol '...'; recompile with -fPIC
```shell
FAILED: [code=1] libminizip-ng.so.4.1.1
: && /usr/bin/cc -fPIC -O2 -pipe -march=core2 -DLIBICONV_PLUG -fstack-protector-strong -fno-strict-aliasing -O2 -pipe -march=core2 -DLIBICONV_PLUG -fstack-protector-strong -fno-strict-aliasing -DNDEBUG -Xlinker --dependency-file=CMakeFiles/minizip-ng.dir/link.d -shared -Wl,-soname,libminizip-ng.so.1 -o libminizip-ng.so.4.1.1 CMakeFiles/minizip-ng.dir/mz_crypt.c.o CMakeFiles/minizip-ng.dir/mz_os.c.o CMakeFiles/minizip-ng.dir/mz_strm.c.o CMakeFiles/minizip-ng.dir/mz_strm_buf.c.o CMakeFiles/minizip-ng.dir/mz_strm_mem.c.o CMakeFiles/minizip-ng.dir/mz_strm_split.c.o CMakeFiles/minizip-ng.dir/mz_zip.c.o CMakeFiles/minizip-ng.dir/mz_zip_rw.c.o CMakeFiles/minizip-ng.dir/mz_strm_zlib.c.o CMakeFiles/minizip-ng.dir/mz_strm_bzip.c.o CMakeFiles/minizip-ng.dir/mz_strm_lzma.c.o CMakeFiles/minizip-ng.dir/mz_strm_ppmd.c.o CMakeFiles/minizip-ng.dir/mz_strm_zstd.c.o CMakeFiles/minizip-ng.dir/mz_crypt_openssl.c.o CMakeFiles/minizip-ng.dir/mz_os_posix.c.o CMakeFiles/minizip-ng.dir/mz_strm_os_posix.c.o CMakeFiles/minizip-ng.dir/mz_strm_pkcrypt.c.o CMakeFiles/minizip-ng.dir/mz_strm_wzaes.c.o CMakeFiles/minizip-ng.dir/compat/ioapi.c.o CMakeFiles/minizip-ng.dir/compat/unzip.c.o CMakeFiles/minizip-ng.dir/compat/zip.c.o -L/usr/local/lib -Wl,-rpath,/usr/local/lib: /usr/local/lib/libz-ng.so /usr/lib/libbz2.so -llzma -lzstd -lssl -lcrypto libppmd.a && :
ld: error: relocation R_X86_64_PC32 cannot be used against symbol '__stack_chk_guard'; recompile with -fPIC
>>> defined in /lib/libc.so.7
>>> referenced by Ppmd8.c
>>> Ppmd8.c.o:(Ppmd8_UpdateModel) in archive libppmd.a
ld: error: relocation R_X86_64_PC32 cannot be used against symbol '__stack_chk_guard'; recompile with -fPIC
>>> defined in /lib/libc.so.7
>>> referenced by Ppmd8Dec.c
>>> Ppmd8Dec.c.o:(Ppmd8_DecodeSymbol) in archive libppmd.a
ld: error: relocation R_X86_64_PC32 cannot be used against symbol '__stack_chk_guard'; recompile with -fPIC
>>> defined in /lib/libc.so.7
>>> referenced by Ppmd8Enc.c
>>> Ppmd8Enc.c.o:(Ppmd8_EncodeSymbol) in archive libppmd.a
ld: error: relocation R_X86_64_PC32 cannot be used against symbol '__stack_chk_guard'; recompile with -fPIC
>>> defined in /lib/libc.so.7
>>> referenced by Ppmd8.c
>>> Ppmd8.c.o:(Ppmd8_UpdateModel) in archive libppmd.a
ld: error: relocation R_X86_64_PC32 cannot be used against symbol '__stack_chk_guard'; recompile with -fPIC
>>> defined in /lib/libc.so.7
>>> referenced by Ppmd8Dec.c
>>> Ppmd8Dec.c.o:(Ppmd8_DecodeSymbol) in archive libppmd.a
ld: error: relocation R_X86_64_PC32 cannot be used against symbol '__stack_chk_guard'; recompile with -fPIC
>>> defined in /lib/libc.so.7
>>> referenced by Ppmd8Enc.c
>>> Ppmd8Enc.c.o:(Ppmd8_EncodeSymbol) in archive libppmd.a
ld: error: relocation R_X86_64_PC32 cannot be used against symbol '__stack_chk_guard'; recompile with -fPIC
>>> defined in /lib/libc.so.7
>>> referenced by Ppmd8.c
>>> Ppmd8.c.o:(Ppmd8_UpdateModel) in archive libppmd.a
ld: error: relocation R_X86_64_PC32 cannot be used against symbol '__stack_chk_guard'; recompile with -fPIC
>>> defined in /lib/libc.so.7
>>> referenced by Ppmd8Enc.c
>>> Ppmd8Enc.c.o:(Ppmd8_EncodeSymbol) in archive libppmd.a
ld: error: relocation R_X86_64_PC32 cannot be used against symbol '__stack_chk_guard'; recompile with -fPIC
>>> defined in /lib/libc.so.7
>>> referenced by Ppmd8.c
>>> Ppmd8.c.o:(Ppmd8_CreateSuccessors) in archive libppmd.a
ld: error: relocation R_X86_64_PC32 cannot be used against symbol '__stack_chk_guard'; recompile with -fPIC
>>> defined in /lib/libc.so.7
>>> referenced by Ppmd8Enc.c
>>> Ppmd8Enc.c.o:(Ppmd8_EncodeSymbol) in archive libppmd.a
ld: error: relocation R_X86_64_PC32 cannot be used against symbol '__stack_chk_guard'; recompile with -fPIC
>>> defined in /lib/libc.so.7
>>> referenced by Ppmd8.c
>>> Ppmd8.c.o:(Ppmd8_CreateSuccessors) in archive libppmd.a
ld: error: relocation R_X86_64_PC32 cannot be used against symbol '__stack_chk_guard'; recompile with -fPIC
>>> defined in /lib/libc.so.7
>>> referenced by Ppmd8.c
>>> Ppmd8.c.o:(RestoreModel) in archive libppmd.a
ld: error: relocation R_X86_64_PC32 cannot be used against symbol '__stack_chk_guard'; recompile with -fPIC
>>> defined in /lib/libc.so.7
>>> referenced by Ppmd8.c
>>> Ppmd8.c.o:(RestoreModel) in archive libppmd.a
ld: error: relocation R_X86_64_PC32 cannot be used against symbol '__stack_chk_guard'; recompile with -fPIC
>>> defined in /lib/libc.so.7
>>> referenced by Ppmd8.c
>>> Ppmd8.c.o:(Ppmd8_Update1) in archive libppmd.a
ld: error: relocation R_X86_64_PC32 cannot be used against symbol '__stack_chk_guard'; recompile with -fPIC
>>> defined in /lib/libc.so.7
>>> referenced by Ppmd8.c
>>> Ppmd8.c.o:(Ppmd8_Update1) in archive libppmd.a
ld: error: relocation R_X86_64_PC32 cannot be used against symbol '__stack_chk_guard'; recompile with -fPIC
>>> defined in /lib/libc.so.7
>>> referenced by Ppmd8.c
>>> Ppmd8.c.o:(Ppmd8_Update1) in archive libppmd.a
ld: error: relocation R_X86_64_PC32 cannot be used against symbol '__stack_chk_guard'; recompile with -fPIC
>>> defined in /lib/libc.so.7
>>> referenced by Ppmd8.c
>>> Ppmd8.c.o:(Ppmd8_Rescale) in archive libppmd.a
ld: error: relocation R_X86_64_PC32 cannot be used against symbol '__stack_chk_guard'; recompile with -fPIC
>>> defined in /lib/libc.so.7
>>> referenced by Ppmd8.c
>>> Ppmd8.c.o:(Ppmd8_Rescale) in archive libppmd.a
cc: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
```
Fix:
```diff
--- CMakeLists.txt.orig 2026-04-23 04:10:20 UTC
+++ CMakeLists.txt
@@ -381,6 +381,7 @@ if(MZ_PPMD)
${PPMD_SOURCE_DIR}/C/Precomp.h)
add_library(ppmd STATIC ${PPMD_SRC} ${PPMD_HDR})
+ target_compile_options(ppmd PRIVATE -fPIC)
list(APPEND MINIZIP_DEP ppmd)
list(APPEND MINIZIP_INC ${PPMD_SOURCE_DIR})
```
6 条评论