繁体   English   中英

使用Boost库和Clion链接错误

[英]Linking with error using boost library and clion

当我尝试通过boost使用文件系统时,出现链接问题。 我从教程中复制了代码:

#include <iostream>
#include <boost/filesystem.hpp>
using namespace boost::filesystem;

int main(int argc, char* argv[])
{
    if (argc < 2)
    {
        std::cout << "Usage: tut1 path\n";
        return 1;
    }
    std::cout << argv[1] << " " << file_size(argv[1]) << '\n';
    return 0;
}

也许应该可以,但是我有这样一个错误:

Scanning dependencies of target untitled
[ 50%] Building CXX object CMakeFiles/untitled.dir/main.cpp.o
[100%] Linking CXX executable untitled
Undefined symbols for architecture x86_64:
  "boost::filesystem::detail::file_size(boost::filesystem::path const&, boost::system::error_code*)", referenced from:
      boost::filesystem::file_size(boost::filesystem::path const&) in main.cpp.o
  "boost::system::system_category()", referenced from:
      ___cxx_global_var_init.2 in main.cpp.o
  "boost::system::generic_category()", referenced from:
      ___cxx_global_var_init in main.cpp.o
      ___cxx_global_var_init.1 in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [untitled] Error 1
make[2]: *** [CMakeFiles/untitled.dir/all] Error 2
make[1]: *** [CMakeFiles/untitled.dir/rule] Error 2
make: *** [untitled] Error 2

我的CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.7)
project(untitled)

set(CMAKE_CXX_STANDARD 11)

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

find_package(Boost)
IF (Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIR})
endif()

我可以改进些什么来编译此代码? 我在OSX上使用CLion编辑器。

在您的CMakeList.txt中更改此行:

find_package(Boost)

通过

find_package(Boost COMPONENTS system filesystem REQUIRED)

并且不要忘记与您的目标链接:

target_link_libraries(untitled 
  ${Boost_FILESYSTEM_LIBRARY}
  ${Boost_SYSTEM_LIBRARY}
)

因此,您的CMakeList.txt将是:

cmake_minimum_required(VERSION 3.7)
project(untitled)

set(CMAKE_CXX_STANDARD 11)

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

find_package(Boost COMPONENTS system filesystem REQUIRED)
IF (Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIR})
    target_link_libraries(untitled 
        ${Boost_FILESYSTEM_LIBRARY}
        ${Boost_SYSTEM_LIBRARY}
        )
endif()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM