代码之家  ›  专栏  ›  技术社区  ›  Dovahkiin

更新cmake(似乎)破坏了我的程序

  •  3
  • Dovahkiin  · 技术社区  · 6 年前

    我从cmake 3.6升级到任何最新版本(3.12.0-rc2),现在我的一个程序无法编译。

    奇怪的是,错误消息显示了标准库中未定义的符号。下面是错误消息:

    Undefined symbols for architecture x86_64:
      "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(char const*)", referenced from:
          GetName() in ncc.cpp.o
          Expression() in ncc.cpp.o
          Term() in ncc.cpp.o
          GetNum() in ncc.cpp.o
      "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string()", referenced from:
          GetName() in ncc.cpp.o
          GetNum() in ncc.cpp.o
      "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::operator+=(char)", referenced from:
          GetName() in ncc.cpp.o
          GetNum() in ncc.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[2]: *** [ncc] Error 1
    make[1]: *** [CMakeFiles/ncc.dir/all] Error 2
    make: *** [all] Error 2
    

    我该怎么解决?是否需要链接到标准库的其他版本?如果是的话,我怎么告诉我?

    这是我的cmakelists.txt文件:

    cmake_minimum_required(VERSION 3.0)
    
    project(ncc)
    
    add_definitions(-std=c++14)
    
    add_subdirectory(${CMAKE_SOURCE_DIR}/src/)
    
    add_executable(ncc ${CompSource})
    add_executable(ncc-opt ${OptSource})
    add_executable(nci ${IntSource})
    

    我试过了 add_definitions 线和没有它,这似乎没有什么区别。

    这是运行 make VERBOSE=1 以下内容:

    Scanning dependencies of target ncc
    /Applications/Xcode.app/Contents/Developer/usr/bin/make -f CMakeFiles/ncc.dir/build.make CMakeFiles/ncc.dir/build
    [ 83%] Building CXX object CMakeFiles/ncc.dir/src/ncc.cpp.o
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++    -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk   -std=c++14 -o CMakeFiles/ncc.dir/src/ncc.cpp.o -c /Users/nepps/Dropbox/Projects/ncc/src/ncc.cpp
    [100%] Linking CXX executable ncc
    /usr/local/bin/cmake -E cmake_link_script CMakeFiles/ncc.dir/link.txt --verbose=1
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++   -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names  CMakeFiles/ncc.dir/src/ncc.cpp.o  -o ncc 
    Undefined symbols for architecture x86_64:
    (same errors as above)
    

    如果您需要更多信息,请随时发表评论。我在用MacBook Pro运行MacOS 10.13.3。

    1 回复  |  直到 6 年前
        1
  •  -1
  •   Dovahkiin    6 年前

    好吧,我不知道它为什么工作,但是程序中的所有函数都被标记了 static 删除了它,错误就消失了。算了吧。