C++ 在CLion(cpp boost库)中找不到gzip_解压缩程序

C++ 在CLion(cpp boost库)中找不到gzip_解压缩程序,c++,boost,clion,C++,Boost,Clion,我尝试使用来自的示例代码解压缩gzip文件 我怀疑gzip_解压器不知怎么被认出来了 正在寻找解决方案 编辑: 1) 这是CMakeLists.txt文件 cmake_minimum_required(VERSION 3.7) project(practice_cpp) set(CMAKE_CXX_STANDARD 11) set(SOURCE_FILES main.cpp) find_package(Boost REQUIRED COMPONENTS system iostreams

我尝试使用来自的示例代码解压缩gzip文件

我怀疑gzip_解压器不知怎么被认出来了

正在寻找解决方案

编辑:

1) 这是CMakeLists.txt文件

cmake_minimum_required(VERSION 3.7)
project(practice_cpp)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp)


find_package(Boost REQUIRED COMPONENTS system iostreams)

if(Boost_FOUND)

    message(STATUS "Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}")
    message(STATUS "Boost_LIBRARIES: ${Boost_LIBRARIES}")
    message(STATUS "Boost_VERSION: ${Boost_VERSION}")

    include_directories(${Boost_INCLUDE_DIRS})

endif()

add_executable(practice_cpp ${SOURCE_FILES})

if(Boost_FOUND)

    target_link_libraries(practice_cpp ${Boost_LIBRARIES})

endif()
2) 另外,我在终端上尝试了这个命令

c++ -I /usr/local/Cellar/boost/1.63.0 main.cpp -lboost_iostreams -o main
哪个输出

$ ./main 
libc++abi.dylib: terminating with uncaught exception of type boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::iostreams::gzip_error> >: gzip error: unspecified iostream_category error
Abort trap: 6
4) $make VERBOSE=ON

$ make VERBOSE=ON
/usr/local/Cellar/cmake/3.7.2/bin/cmake -H/path/to/practice_cpp -B/path/to/practice_cpp --check-build-system CMakeFiles/Makefile.cmake 0
/usr/local/Cellar/cmake/3.7.2/bin/cmake -E cmake_progress_start /path/to/practice_cpp/CMakeFiles /path/to/practice_cpp/CMakeFiles/progress.marks
/Library/Developer/CommandLineTools/usr/bin/make -f CMakeFiles/Makefile2 all
/Library/Developer/CommandLineTools/usr/bin/make -f CMakeFiles/practice_cpp.dir/build.make CMakeFiles/practice_cpp.dir/depend
cd /path/to/practice_cpp && /usr/local/Cellar/cmake/3.7.2/bin/cmake -E cmake_depends "Unix Makefiles" /path/to/practice_cpp /path/to/practice_cpp /path/to/practice_cpp /path/to/practice_cpp /path/to/practice_cpp/CMakeFiles/practice_cpp.dir/DependInfo.cmake --color=
/Library/Developer/CommandLineTools/usr/bin/make -f CMakeFiles/practice_cpp.dir/build.make CMakeFiles/practice_cpp.dir/build
make[2]: Nothing to be done for `CMakeFiles/practice_cpp.dir/build'.
[100%] Built target practice_cpp
/usr/local/Cellar/cmake/3.7.2/bin/cmake -E cmake_progress_start /path/to/practice_cpp/CMakeFiles 0

我使用的是类似的配置(macOS+brew安装了boost),所以我对它进行了测试。答案中列出的cmake配置现在可以了

cmake_minimum_required(VERSION 3.7)

project(practice_cpp)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp)


find_package(Boost REQUIRED COMPONENTS system iostreams)

if(Boost_FOUND)

    message(STATUS "Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}")
    message(STATUS "Boost_LIBRARIES: ${Boost_LIBRARIES}")
    message(STATUS "Boost_VERSION: ${Boost_VERSION}")

    include_directories(${Boost_INCLUDE_DIRS})

endif()

add_executable(practice_cpp ${SOURCE_FILES})

if(Boost_FOUND)

    target_link_libraries(practice_cpp ${Boost_LIBRARIES})

endif()
问题是,这似乎与问题中发布的原始文件不同:

cmake_minimum_required(VERSION 3.7)
project(practice_cpp)

set(CMAKE_CXX_STANDARD 11)

    set(SOURCE_FILES main.cpp)
add_executable(practice_cpp ${SOURCE_FILES})

find_package(Boost REQUIRED COMPONENTS system iostreams)

if(Boost_FOUND)

    message(STATUS "Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}")
    message(STATUS "Boost_LIBRARIES: ${Boost_LIBRARIES}")
    message(STATUS "Boost_VERSION: ${Boost_VERSION}")

include_directories(${Boost_INCLUDE_DIRS})

endif()

add_executable(BoostTest main.cpp)


target_link_libraries(practice_cpp ${Boost_LIBRARIES})
当我第一次看到这个问题时,文件是这样的。我测试了它,得到了问题中的精确误差


所以实际上,
BoostTest
是可执行文件,您应该添加
target\u link\u库(BoostTest${Boost\u libraries})

CMakeLists.txt的实际内容是什么。编程不是“驯服IDE的艺术”。如果说有什么区别的话,那就是驯服编译器的艺术,而IDE仅仅是一个工具(可能会成为阻碍)。你必须链接
-lboost\u iostreams
库。请显示您的
cmake
文件。如果它有
find\u包(Boost…
string),则添加
iostreams
。例如:
find\u包(Boost所需组件系统iostreams)
另外,我怀疑平台是OSX?试着传递
cmake-DCMAKE\u EXPORT\u COMPILE\u命令
并检查
COMPILE\u命令。json
@sehe@JustRufus我添加了一些编辑:D.@sehe是的,它是OSX。我对cpp很陌生,所以我不知道在哪里传递命令。它在终端上不起作用。我应该包括
set吗(DCMAKE\u EXPORT\u COMPILE\u命令)
to Makefile.cmake?很抱歉,这个问题太简单了。同时,我会用谷歌搜索它!应该是
cmake-DCMAKE\u EXPORT\u COMPILE\u COMMANDS=ON。
e.g.Oh,是的,我发现了问题,这就是我编辑文件的原因。但是,它给出了
libc++abi.dylib:终止时出现boost::exception\u detail::clone\u imp类型的未捕获异常l:gzip错误:未指定的iostream_类别错误
error。顺便说一句,感谢您指出这一点。我已更改了错误消息。@HeeKyungYoon这是因为文件
example.txt.gz
不在当前工作目录(cwd)中。您可以在“运行配置”中设置cwd是的。当我在执行Ctrl Z时,它意外地更改为原始示例代码,而不是example.txt.gz。感谢您指出这一点!
$ make VERBOSE=ON
/usr/local/Cellar/cmake/3.7.2/bin/cmake -H/path/to/practice_cpp -B/path/to/practice_cpp --check-build-system CMakeFiles/Makefile.cmake 0
/usr/local/Cellar/cmake/3.7.2/bin/cmake -E cmake_progress_start /path/to/practice_cpp/CMakeFiles /path/to/practice_cpp/CMakeFiles/progress.marks
/Library/Developer/CommandLineTools/usr/bin/make -f CMakeFiles/Makefile2 all
/Library/Developer/CommandLineTools/usr/bin/make -f CMakeFiles/practice_cpp.dir/build.make CMakeFiles/practice_cpp.dir/depend
cd /path/to/practice_cpp && /usr/local/Cellar/cmake/3.7.2/bin/cmake -E cmake_depends "Unix Makefiles" /path/to/practice_cpp /path/to/practice_cpp /path/to/practice_cpp /path/to/practice_cpp /path/to/practice_cpp/CMakeFiles/practice_cpp.dir/DependInfo.cmake --color=
/Library/Developer/CommandLineTools/usr/bin/make -f CMakeFiles/practice_cpp.dir/build.make CMakeFiles/practice_cpp.dir/build
make[2]: Nothing to be done for `CMakeFiles/practice_cpp.dir/build'.
[100%] Built target practice_cpp
/usr/local/Cellar/cmake/3.7.2/bin/cmake -E cmake_progress_start /path/to/practice_cpp/CMakeFiles 0
cmake_minimum_required(VERSION 3.7)

project(practice_cpp)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp)


find_package(Boost REQUIRED COMPONENTS system iostreams)

if(Boost_FOUND)

    message(STATUS "Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}")
    message(STATUS "Boost_LIBRARIES: ${Boost_LIBRARIES}")
    message(STATUS "Boost_VERSION: ${Boost_VERSION}")

    include_directories(${Boost_INCLUDE_DIRS})

endif()

add_executable(practice_cpp ${SOURCE_FILES})

if(Boost_FOUND)

    target_link_libraries(practice_cpp ${Boost_LIBRARIES})

endif()
cmake_minimum_required(VERSION 3.7)
project(practice_cpp)

set(CMAKE_CXX_STANDARD 11)

    set(SOURCE_FILES main.cpp)
add_executable(practice_cpp ${SOURCE_FILES})

find_package(Boost REQUIRED COMPONENTS system iostreams)

if(Boost_FOUND)

    message(STATUS "Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}")
    message(STATUS "Boost_LIBRARIES: ${Boost_LIBRARIES}")
    message(STATUS "Boost_VERSION: ${Boost_VERSION}")

include_directories(${Boost_INCLUDE_DIRS})

endif()

add_executable(BoostTest main.cpp)


target_link_libraries(practice_cpp ${Boost_LIBRARIES})