如何修复 C++ error: undefined reference to zlibVersion

问题:

编译 C++ 应用程序时,你看到以下一个或多个错误消息(完整错误消息日志示例如下所示)

zlib_undefined_references.txt
version.c:(.text+0x5d): undefined reference to `zlibVersion'
content_encoding.c:(.text+0x1f8): undefined reference to `inflateInit_'
content_encoding.c:(.text+0x2b5): undefined reference to `inflateEnd'
/usr/bin/ld: content_encoding.c:(.text+0x401): undefined reference to `inflateInit2_'

解决方案

你需要将 zlib 链接到你的可执行文件 - 需要链接的库称为 zlibz.so)。手动运行 gcc 时,使用 -lz 选项,例如:

gcc_link_zlib.sh
gcc -o myexe main.cpp -lz

使用 CMake 时,使用

CMakeLists.txt
add_executable(myexe main.cpp)
target_link_libraries(myexe z)

完整错误日志示例:

ld_error_zlib.txt
/usr/bin/ld: /home/uli/.conan/data/libcurl/7.69.1/_/_/package/d66c87f35a2a176e10af56a7f32a51d6e7b43e26/lib/libcurl.a(libcurl_la-version.o): in function `curl_version':
version.c:(.text+0x5d): undefined reference to `zlibVersion'
/usr/bin/ld: /home/uli/.conan/data/libcurl/7.69.1/_/_/package/d66c87f35a2a176e10af56a7f32a51d6e7b43e26/lib/libcurl.a(libcurl_la-version.o): in function `curl_version_info':
version.c:(.text+0x169): undefined reference to `zlibVersion'
/usr/bin/ld: /home/uli/.conan/data/libcurl/7.69.1/_/_/package/d66c87f35a2a176e10af56a7f32a51d6e7b43e26/lib/libcurl.a(libcurl_la-content_encoding.o): in function `deflate_init_writer':
content_encoding.c:(.text+0x1f8): undefined reference to `inflateInit_'
... (truncated)

Check out similar posts by category: C/C++, GCC Errors