无法在 Windows 7 上编译 restbed
Posted
技术标签:
【中文标题】无法在 Windows 7 上编译 restbed【英文标题】:Can't compile restbed on Windows 7 【发布时间】:2017-04-27 15:08:41 【问题描述】:我已经结束了 16 个小时的配置、安装、删除、修改和多次敲击我的键盘......
我想使用restbed 进行独立于平台的 C++ 编程,但我无法构建这些东西。我安装了 Cygwin(在 2017/04/24 下载)(想想 git 或任何令人毛骨悚然的东西),Code::Blocks with MinGW(16.01)和至少一个单独的 MinGW(也在 2017/04/24 下载)安装。我还在 Windows 7 x64 Pro 上安装了 Visual Studio 2012 Pro、2015 和 2017(长篇故事)。
这是我尝试的结果: 在空目录中使用 git 递归克隆并按照说明进行操作。
cmake -DBUILD_TESTS=YES -DBUILD_EXAMPLES=YES -DBUILD_SSL=NO -DBUILD_SHARED=YES ..
嗯……成功了。我似乎使用了 Cygwin 的 gcc/g++。
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
:
:
-- Configuring done
-- Generating done
-- Build files have been written to: /cygdrive/d/Entwicklung/C++/restbed/restbed/build
不错!现在如下:
make -j install
工作了 7% 后,它给出了一堆警告并失败了:
/cygdrive/my_path_to/restbed/restbed/dependency/asio/asio/include/asio/detail/config.hpp:755:5: warning: #warning Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately. [-Wcpp]
# warning Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately.
^
/cygdrive/my_path_to/restbed/restbed/dependency/asio/asio/include/asio/detail/config.hpp:756:5: warning: #warning For example, add -D_WIN32_WINNT=0x0501 to the compiler command line. [-Wcpp]
# warning For example, add -D_WIN32_WINNT=0x0501 to the compiler command line.
^
/cygdrive/my_path_to/restbed/restbed/dependency/asio/asio/include/asio/detail/config.hpp:757:5: warning: #warning Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target). [-Wcpp]
# warning Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target).
^
/cygdrive/my_path_to/restbed/restbed/dependency/asio/asio/include/asio/detail/config.hpp:781:5: error: #error You must add -D__USE_W32_SOCKETS to your compiler options.
我修改 config.hpp 并添加
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif
“define bla”警告消失了,但现在我应该设置“-D__USE_W32_SOCKETS”。
但是在哪里?
在研究 google 之后,我尝试设置一个环境变量 CPPFLAGS=-D__USE_W32_SOCKETS,但这没有任何改变!
好的,现在我想给 MinGW 一个机会,但是我如何摆脱这个渗透的 Cygwin,而不卸载并弄乱其他软件?
酷,我应该设置一些环境变量吗.... 清理 build-Directory 并按照 cmake 输出中的说明设置 CC 和 CXX。
SET CC=D:/MinGW/bin/gcc.exe
SET CXX=D:/MinGW/bin/g++.exe
检查我的 PATH 变量并添加“;D:\MinGW\mysys\1.0\bin;D:\MinGW\bin”
现在再次使用 cmake bla.....但是...但是...什么?
-- The C compiler identification is GNU 5.3.0
-- The CXX compiler identification is GNU 5.3.0
CMake Error at CMakeLists.txt:4 (project):
The CMAKE_C_COMPILER:
D:/MinGW/bin/gcc.exe
is not a full path and was not found in the PATH.
Tell CMake where to find the compiler by setting either the environment
variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to
the compiler, or to the compiler name if it is in the PATH.
CMake Error at CMakeLists.txt:4 (project):
The CMAKE_CXX_COMPILER:
D:/MinGW/bin/g++.exe
is not a full path and was not found in the PATH.
Tell CMake where to find the compiler by setting either the environment
variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
to the compiler, or to the compiler name if it is in the PATH.
-- Configuring incomplete, errors occurred!
See also "/cygdrive/my_path_to/restbed/restbed/build/CMakeFiles/CMakeOutput.log".
Cygwin cmake 说,我在 GNU 5.4.0 版本中使用 gcc/g++。另一方面,它检测到正确的 MinGW 版本为 5.3.0,但找不到?胡?
如何让这个库在 Windows 7 下工作?
开始编辑
要为 Code::Blocks 构建 makefile,-G 参数不起作用。我尝试了一些组合,但总是说:
cmake -DBUILD_TESTS=YES -DBUILD_EXAMPLES=YES -DBUILD_SSL=NO -DBUILD_SHARED=YES -G "CodeBlocks" ..
CMake Error: Could not create named generator CodeBlocks
Generators
Unix Makefiles = Generates standard UNIX makefiles.
Ninja = Generates build.ninja files.
CodeBlocks - Ninja = Generates CodeBlocks project files.
CodeBlocks - Unix Makefiles = Generates CodeBlocks project files.
:
:
cmake -DBUILD_TESTS=YES -DBUILD_EXAMPLES=YES -DBUILD_SSL=NO -DBUILD_SHARED=YES -G "CodeBlocks - Ninja" ..
CMake Error: CMake was unable to find a build program corresponding to "Ninja". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
现在这个(很多被删掉的词)东西想知道cmake-make?
我的错....别想了,我安装了什么。
“CodeBlocks - Unix Makefiles”按预期工作以生成项目文件,但无法在 Code::Blocks 下编译。我将“构建选项”中项目的编译器更改为 Cygwin,但说:
Execution of '/usr/bin/make.exe -j8 -f "/cygdrive/d/my_path_to/restbed/restbed/build/Makefile" VERBOSE=1 all' in 'D:\my_path_to\restbed\restbed\build' failed.
...仅此而已。认为它与Windows下的“Unix Makefile”有关。
编辑结束
我不知道该做什么,设置什么,删除,修改,配置,aaaargh。
我最后的希望是,有人有大提示、好主意或解决方法。
提前致谢。
【问题讨论】:
关于 MinGW 错误:不要设置 CC 或 CXX 或 CMAKE_C_FLAGS、CMAKE_CXX_FLAGS。而是让 MinGW 的 gcc、g++ 在您的路径中可用;即设置 PATH=D:\MinGW\bin;%PATH%。最重要的是,使用 -G"MinGW Makefiles" 调用 cmake。 【参考方案1】:Restbed 可以使用Visual Studio 2015/2017 构建,为什么不使用该平台的原生工具链?
【讨论】:
根据restbed“自述文件”,需要符合c++11的编译器。 GCC 5.4.0 当然是符合 c++11 的,所以应该使用最小的 cmake cmdline(在 MinGW 环境中) 您所说的故障看起来是环境问题,与项目无关。在 GitHub 问题跟踪器上提出工单,并在时间允许时进行处理;由于本机工具链的可用性,优先级较低。以上是关于无法在 Windows 7 上编译 restbed的主要内容,如果未能解决你的问题,请参考以下文章
Open GL 在 Codelite Windows 7 上编译,但没有显示输出
在 Windows 上编译时出现 Apache thrift 错误