C++ 在CLion(cpp boost库)中找不到gzip_解压缩程序
我尝试使用来自的示例代码解压缩gzip文件 我怀疑gzip_解压器不知怎么被认出来了 正在寻找解决方案 编辑: 1) 这是CMakeLists.txt文件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
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})