Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cmake中静态链接boost未定义的zlib问题_Boost_Cmake_C++17 - Fatal编程技术网

cmake中静态链接boost未定义的zlib问题

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项目与最新的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