【问题标题】:Build cpp-netlib fail - not adding lib prefix构建 cpp-netlib 失败 - 不添加 lib 前缀
【发布时间】:2014-05-29 20:28:29
【问题描述】:

我正在尝试使用来自 cygwin 的 cmake 构建 cpp-netlib。 但是 cmake 尝试查找没有 lib 前缀的包。而-DBoost_USE_STATIC_LIBS=ON 也解决不了问题!

这是我的命令行:

cmake ../cpp-netlib-0.9.4/ -DBOOST_ROOT:string=/cygdrive/c/Dev/boost_1_55_0 -DBoost_USE_STATIC_LIBS=ON -DBoost_DEBUG=ON -DBoost_DETAILED_FAILURE_MSG=ON

搜索:

-- [ /usr/share/cmake-2.8.11.2/Modules/FindBoost.cmake:930 ] Searching for THREAD_LIBRARY_RELEASE: boost_thread-gcc48-mt-1_55;boost_thread-gcc48-mt;boost_thread-mt-1_55;boost_thread-mt;boost_thread
-- [ /usr/share/cmake-2.8.11.2/Modules/FindBoost.cmake:966 ] Searching for THREAD_LIBRARY_DEBUG: boost_thread-gcc48-mt-d-1_55;boost_thread-gcc48-mt-d;boost_thread-mt-d-1_55;boost_thread-mt-d;boost_thread-mt;boost_thread
-- [ /usr/share/cmake-2.8.11.2/Modules/FindBoost.cmake:930 ] Searching for FILESYSTEM_LIBRARY_RELEASE: boost_filesystem-gcc48-mt-1_55;boost_filesystem-gcc48-mt;boost_filesystem-mt-1_55;boost_filesystem-mt;boost_filesystem
-- [ /usr/share/cmake-2.8.11.2/Modules/FindBoost.cmake:966 ] Searching for FILESYSTEM_LIBRARY_DEBUG: boost_filesystem-gcc48-mt-d-1_55;boost_filesystem-gcc48-mt-d;boost_filesystem-mt-d-1_55;boost_filesystem-mt-d;boost_filesystem-mt;boost_filesystem
-- [ /usr/share/cmake-2.8.11.2/Modules/FindBoost.cmake:930 ] Searching for PROGRAM_OPTIONS_LIBRARY_RELEASE: boost_program_options-gcc48-mt-1_55;boost_program_options-gcc48-mt;boost_program_options-mt-1_55;boost_program_options-mt;boost_program_options
-- [ /usr/share/cmake-2.8.11.2/Modules/FindBoost.cmake:966 ] Searching for PROGRAM_OPTIONS_LIBRARY_DEBUG: boost_program_options-gcc48-mt-d-1_55;boost_program_options-gcc48-mt-d;boost_program_options-mt-d-1_55;boost_program_options-mt-d;boost_program_options-mt;boost_program_options

这是完整的结果:http://pastebin.com/ZBfQyWvw

正如您在命令行中看到的,我使用的是 cpp-netlib 0.9.4 和 Boost 1.55.0。

有什么提示吗?

谢谢!

【问题讨论】:

  • 您能否给出您机器上肯定存在的 Boost 库之一的名称和完整路径,并且您希望 CMake 找到它?
  • 是的,当然。这些库位于 C:\Dev\boost_1_55_0\stage\lib(或 /cygdrive/c/Dev/boost_1_55_0/stage/lib)。完整列表在这里:pastebin.com/6uk5pv3s。但是,当您问我时,我看到了另一个问题。 libboost 文件是 vc120,来自 cpp-netlib 的 CMake 需要 gcc48...
  • 忘记 cygwin,我下载了适用于 Windows 的 CMake 和 OpenSSL 版本并使用命令提示符构建它。现在一切正常。但是我在构建解决方案时遇到了一些问题。我需要更改项目的某些内容,还是只需要打开 .sln 并构建?

标签: c++ boost cmake cygwin cpp-netlib


【解决方案1】:

看起来您的 Boost 库是使用指定为编译器的 MSVC 构建的(它们名称中的“-vc120-”就是说明)。使用 Cygwin,您需要针对 Unix 变体进行构建。

来自Boost的build instructions for Windows顶部的注释:

Cygwin 和 MinGW 用户须知

如果您打算在 Windows 命令提示符下使用您的工具,那么您来对地方了。如果您计划从 Cygwin bash shell 构建,那么您实际上是在 POSIX 平台上运行的,并且应该遵循getting started on Unix variants 的说明。不支持其他命令 shell,例如 MinGW 的 MSYS,它们可能有效,也可能无效。

您可以看到 CMake 的 FindBoost 模块正在做正确的事情;猜测编译器是GCC。例如,您链接的 CMake 输出的第 62 行是:

-- [ /usr/share/cmake-2.8.11.2/Modules/FindBoost.cmake:739 ] 猜测_boost_COMPILER = -gcc48

【讨论】:

  • 完美,这是我的问题。使用 CMake 和 OpenSSL for Windows 并使用命令提示符构建修复问题。现在尝试构建解决方案,但我认为这是另一个话题。 :)
猜你喜欢
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 2019-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多