"library has no symbol"是什么意思?

What does "library has no symbol" mean?

本文关键字:意思 是什么 no library has symbol      更新时间:2023-10-16

我正在使用CMake来构建我的项目所需的一些依赖项库。它们是Boost_system、Boost_filesystem和Boost_program_options。我正在单独编译静态库,而不是编译整个 Boost 库。

一切正常,但我收到以下警告消息:

...
[ 67%] Building CXX object filesystem/CMakeFiles/filesystem.dir/src/utf8_codecvt_facet.cpp.o
[ 70%] Building CXX object filesystem/CMakeFiles/filesystem.dir/src/windows_file_codecvt.cpp.o
[ 74%] Linking CXX static library libfilesystem.a
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libfilesystem.a(windows_file_codecvt.cpp.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libfilesystem.a(windows_file_codecvt.cpp.o) has no symbols
[ 74%] Built target filesystem
[ 77%] Building CXX object CMakeFiles/canalogsmp.dir/src/Array2D.cpp.o
...

我的问题是:

  • 符号是什么?警告消息是什么意思?
  • 如何摆脱此警告消息?

感谢nakiya,我找到了答案。

因此,警告消息的解释在这里。基本上,ranlib 找不到任何操作代码。但就我而言,我只需要忽略警告。

此处提供了解决方案,也粘贴在下面。确保将标志传递给ranlib而不是编译器本身。

SET(CMAKE_C_ARCHIVE_FINISH   "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
SET(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")