undefined reference to `ZSTD_decompressStream'

cmake .. -DCMAKE_INSTALL_PREFIX=$PREFIX -DCMAKE_INSTALL_LIBDIR=$PREFIX/lib -DBUILD_SHARED_LIBS=OFF -DSQLITE3_INCLUDE_DIR=$PREFIX/include -DSQLITE3_LIBRARY=$PREFIX/lib/libsqlite3.a
编译proj9.0.1使用cmake命令报错:
/usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference to deflateInit_' /usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference tozlibVersion'
/usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference to deflate' /usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference toZSTD_initCStream'
/usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference to deflateEnd' /usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference toZSTD_compressStream'
/usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference to ZSTD_freeCStream' /usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference toinflate'
/usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference to ZSTD_maxCLevel' /usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference toinflateInit2_'
/usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference to inflateInit_' /usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference toZSTD_createDStream'
/usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference to inflateEnd' /usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference toZSTD_decompressStream'
/usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference to ZSTD_initDStream' /usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference toZSTD_createCStream'
/usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference to inflateReset' /usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference todeflateReset'
/usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference to ZSTD_isError' /usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference toZSTD_freeDStream'
/usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference to ZSTD_getErrorName' /usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference toZSTD_endStream'
/usr/bin/ld: ../../lib/libproj.so.25.9.0.1: undefined reference to `deflateParams'

该回答引用ChatGPT-3.5,仅供参考,不保证完全正确

这个错误表明在编译proj9.0.1时,链接器(ld)无法找到对应的函数定义。这些函数是与zlib和Zstandard(ZSTD)库相关的。


要解决这个问题,你需要确保正确链接了zlib和ZSTD库。以下是一些可能的解决方法:

  1. 检查依赖:确保系统上已经安装了zlib和ZSTD库及其开发包。你可以使用包管理器来安装它们。在大多数Linux发行版上,可以使用以下命令来安装:

    对于Debian/Ubuntu系统:

    sudo apt-get install zlib1g-dev libzstd-dev
    

    对于CentOS/Fedora系统:

    sudo yum install zlib-devel libzstd-devel
    

    这将安装zlib和ZSTD库及其开发文件。

  2. 检查库路径:确认zlib和ZSTD库的路径在系统的库搜索路径中。你可以检查/etc/ld.so.conf文件和LD_LIBRARY_PATH环境变量,确保这些库所在的路径被正确设置。

  3. 检查CMake配置:如果你使用CMake来构建项目,请确保CMakeLists.txt文件中已正确指定zlib和ZSTD库的路径。你可以使用find_package命令来查找和链接这些库。示例:

    find_package(ZLIB REQUIRED)
    find_package(ZSTD REQUIRED)
    
    target_link_libraries(your_target_name PRIVATE ZLIB::ZLIB ZSTD::ZSTD)
    

    确保将这些代码添加到CMakeLists.txt文件中,并将your_target_name替换为你的目标名称。

  4. 清理和重新构建:尝试清理构建目录并重新运行CMake和make命令。这有时可以解决构建问题。


该回答引用NewBing,仅供参考,不保证完全正确

您好,这是Bing。我看到您在使用Linux编译proj9.0.1时遇到了一些问题。根据我的搜索结果,这可能是由于您在链接时缺少了相关的库文件,导致了undefined reference to zlib的错误¹²³。您可以尝试在编译命令中添加-lz和-lzstd参数,以链接zlib和zstd库,或者检查您的库文件是否正确安装和配置。希望这能对您有所帮助。😊


源: 与必应的对话, 2023/7/18
(1) “undefined reference to“ 解决方法_daijingxin的博客-CSDN博客. https://blog.csdn.net/daijingxin/article/details/117292473.
(2) 怎么解决编译时出现的“undefined reference to xxx”错误. https://blog.csdn.net/weixin_41944449/article/details/120586638.
(3) Linux makefile — undefined reference to 问题解决方法 - CSDN博客. https://blog.csdn.net/yanjing12260302/article/details/81197623.

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    这只是解决相关问题的一种可能的方法,根据具体情况可能会有其他解决方案。因此,如果您仍然遇到问题,请提供更多关于您的编译环境和项目配置的详细信息,以便我们能够更好地帮助您解决问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^