提问人:user3007875 提问时间:6/16/2023 最后编辑:user3007875 更新时间:6/20/2023 访问量:123
提升有关 zlib 的 iostreams 链接错误
Boost iostreams linking errors regarding zlib
问:
Windows 10 64 位,使用编译器 clang-cl 和 CMake。
我编译了这样的提升:
1 将 zlib 源代码下载到C:/zlib-1.2.12
2 在我添加的文件中boost_root/project_config.jam
using zlib : 1.2.12 : <source>C:/zlib-1.2.12 ;
3 编译的 iostreams
b2.exe toolset=clang-win --with-iostreams -s NO_ZLIB=0 link=shared threading=multi runtime-debugging=off variant=release address-model=64 -a
4 在 CMakeLists 中用于我的项目
...
find_package(Boost)
target_link_librares(myproj Boost::iostreams zlib)
...
5 并构建了项目,但出现链接错误
undefined symbol: int const boost::iostreams::zlib::okay
undefined symbol: int const boost::iostreams::zlib::sync_flush
undefined symbol: int const boost::iostreams::zlib::stream_end
undefined symbol: int const boost::iostreams::zlib::default_strategy
undefined symbol: int const boost::iostreams::zlib::deflated
undefined symbol: int const boost::iostreams::zlib::default_compression
我尝试通过在 中指定参数来使用预编译的 zlib,但最终遇到了相同的链接错误。project-config.jam
答:
0赞
sehe
6/19/2023
#1
由于您知道该库存在并且已构建,因此您可以尝试手动添加它,例如:
link_directories(${BOOST_ROOT}/stage/lib)
target_link_libraries(myproj z)
查看我的本地(在 linux 机器上),我可以看到以下变化:FindBoost.cmake
.. versionadded:: 3.7
``bzip2`` and ``zlib`` components (Windows only).
很久以后
.. versionadded:: 3.19
``bzip2`` and ``zlib`` components on all platforms.
按理说,Boost知道如何做到这一点。事实上,在我对 linux 的简单测试中,链接到组件确实让我获得了 zlib:Boost::iostreams
find_package(Boost 1.79.0 COMPONENTS iostreams)
target_link_libraries(mytarget Boost::iostreams)
展示
ldd build/mutarget
linux-vdso.so.1 (0x00007ffef0395000)
libboost_iostreams.so.1.82.0 => /home/sehe/custom/superboost/stage/lib/libboost_iostreams.so.1.82.0 (0x00007f271cdd9000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f271cb89000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f271cb69000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f271c941000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f271c925000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f271c83c000)
也许您的 Cmake、Boost 或 FindBoost.cmake 版本太旧了?也许你的 Cmake 没有找到正确的版本?
评论
0赞
user3007875
6/20/2023
我手动链接了z.lib库,但仍然有同样的问题。我正在使用 CMake 3.20 和 Boost 1.81.0,所以它们应该是最新的。我检查了链接命令,它链接了 iostreams 和 z.lib 库。不知道还能尝试什么......
评论
myproj
using zlib : 1.2.12 : <source>C:/zlib_1.2.12_bin ;
project-config.jam
C:/zlib_1.2.12_bin
z.dll