cmake中静态链接boost未定义的zlib问题
我试图将一个大型cmake项目与最新的boost 1.70静态链接(不使用cmake包),但是我得到了一个未定义的zlib参考。这适用于动态链接,但我特别需要静态链接 我试图改变我的boost组件的顺序,特别是添加了zlib作为目标库和一些配置选项,我在网上读到了,但没有乐趣 CMAKE文件 ld错误 更新1 与我尝试使用findzlib.cmake包的评论建议一样,我甚至下载并编译了zlib的最新版本(1.2.11),因为这可能会更好地与我的boost版本(1.70)配合使用cmake中静态链接boost未定义的zlib问题,boost,cmake,c++17,Boost,Cmake,C++17,我试图将一个大型cmake项目与最新的boost 1.70静态链接(不使用cmake包),但是我得到了一个未定义的zlib参考。这适用于动态链接,但我特别需要静态链接 我试图改变我的boost组件的顺序,特别是添加了zlib作为目标库和一些配置选项,我在网上读到了,但没有乐趣 CMAKE文件 ld错误 更新1 与我尝试使用findzlib.cmake包的评论建议一样,我甚至下载并编译了zlib的最新版本(1.2.11),因为这可能会更好地与我的boost版本(1.70)配合使用 我仍然得到相同的
我仍然得到相同的链接器错误,它找到的库是一个共享对象,cmake包似乎没有静态库选项 下面的代码似乎表明您找到了动态库,而这不是您想要的。。显然:) ZLIB_库-[/usr/lib/x86_64-linux-gnu/libz.so] 根据zlib的说法,关于使用find_包和static,zlib并不友好。解决此问题的另一种方法是通过自己的cmake文件自己编译zlib
- 创建一个文件夹。e、 g项目内部的外部
- 下载/克隆zlib到其中
./CMakeLists.txt
./external/zlib
./build
./main.cpp
从这个例子中得到启发:
cmake_minimum_required(VERSION 3.14)
project(zlib-test)
add_executable(${PROJECT_NAME} main.cpp)
add_subdirectory(external/zlib EXCLUDE_FROM_ALL)
target_link_libraries(${PROJECT_NAME} PRIVATE zlibstatic)
根据otool的说法,zlib不是动态链接的,我在网上找到的zlib随机代码似乎仍然有效
computer:build$ otool -L zlib-test
zlib-test:
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.250.1)
computer:build$ ./zlib-test
Initial size: 100
Compressed size: 21
Uncompressed size: 100
Great Success
无论您是否愿意使用find_包解决您的问题,我认为自己编译zlib对您是有利的,因为您可以控制您正在使用的版本。但是这是宗教的边缘,所以请根据您的需要做任何事情:)下面的代码似乎表明您找到了动态库,而这不是您想要的。。显然:) ZLIB_库-[/usr/lib/x86_64-linux-gnu/libz.so] 根据zlib的说法,关于使用find_包和static,zlib并不友好。解决此问题的另一种方法是通过自己的cmake文件自己编译zlib
- 创建一个文件夹。e、 g项目内部的外部
- 下载/克隆zlib到其中
./CMakeLists.txt
./external/zlib
./build
./main.cpp
从这个例子中得到启发:
cmake_minimum_required(VERSION 3.14)
project(zlib-test)
add_executable(${PROJECT_NAME} main.cpp)
add_subdirectory(external/zlib EXCLUDE_FROM_ALL)
target_link_libraries(${PROJECT_NAME} PRIVATE zlibstatic)
根据otool的说法,zlib不是动态链接的,我在网上找到的zlib随机代码似乎仍然有效
computer:build$ otool -L zlib-test
zlib-test:
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.250.1)
computer:build$ ./zlib-test
Initial size: 100
Compressed size: 21
Uncompressed size: 100
Great Success
无论您是否愿意使用find_包解决您的问题,我认为自己编译zlib对您是有利的,因为您可以控制您正在使用的版本。但是这是宗教的边缘,所以请根据您的需要做任何事情:)有一个
FindZLib.cmake
随cmake一起提供。您可能希望将此添加到依赖项链。添加了更新以涵盖FindZib建议,仍然没有乐趣:(cmake附带了一个FindZLib.cmake
。您可能希望将此添加到依赖项链。添加了更新以涵盖FindZib建议,仍然没有乐趣:(
computer:build$ otool -L zlib-test
zlib-test:
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.250.1)
computer:build$ ./zlib-test
Initial size: 100
Compressed size: 21
Uncompressed size: 100
Great Success