Advertisement

使用cmake gui 生成cpp-netlib vs2013项目并编译说明

阅读量:

cpp-netlib 项目编译的说明

1.编译cpp-netlib需要boost库和openssl支持,编译过程中发现,对boost库和openssl库的版本有要求,对vc编译器的版本也有要求,要尽量想c++11靠拢。

2.尝试的版本

1.cpp-netlib:

cpp-netlib-0.12.0-final和cpp-netlib-0.11.2-final

2.boost:

boost_1_57_0和boost_1_59_0

3.openssl:

Win32OpenSSL-1_0_2L.exe和Win32OpenSSL-1_1_0f.exe,openssl-0.9.8

3.我们最终需要的库文件

cppnetlib-client-connections.lib

cppnetlib-server-parsers.lib

cppnetlib-uri.lib

由cppnetlib-client-connections、cppnetlib-server-parsers、cppnetlib-uri三个项目编译生成。

4.编译过程中遇到的问题和解决方法

1.刚开始根据官方文档以为需要安装boots库,并不需要,修改CMakeLists.txt文件,指定boost的头文件和库目录和BOOST_ROOT值即可。

2.使用cmake gui生成项目过程中,发现找不到boost库问题,检查CMakeLists.txt文件是否set(Boost_USE_STATIC_LIBS OFF)。

3.使用cmake gui生成cpp-netlib-0.12.0-final vs2013项目,引用boost 1.57.0,编译出现各种类型未定义错误,第一个是std::unit_8未定义,经查询可能是是vs2013编译器不符

合c++ 11标准造成。后改用低版本的cpp-netlib-0.11.2-final和boost 1.59.0编译通过

4.引入openssl时,使用openssl-0.9.8,编译出错,提示的意思是安全级别不够。换用Win32OpenSSL-1_1_0f.exe,老是编译失败,失败

在E:\project\BaseSupport\boost_1_59_0\boost\asio\ssl\detail文件夹下文件,应该是与boost库不兼容。换用Win32OpenSSL-1_0_2L.exe后正常编译。

5.

这里引用的都是openssl的vs动态库,可以手动改为静态库。

5. CMakeLists.txt 为引入 boost 和 openssl 修改部分

set (Boost_ADDITIONAL_VERSIONS "1.59" "1.59.0" )

SET (BOOST_ROOT "E:/project/boost_1_59_0")

SET (BOOST_INCLUDEDIR "E:/project/boost_1_59_0/boost")

SET (BOOST_LIBRARYDIR "E:/project/boost_1_59_0/vs13/lib")

SET(OPENSSL_ROOT_DIR "C:/OpenSSL-Win32/bin")

SET(OPENSSL_INCLUDE_DIR "C:/OpenSSL-Win32/include")

SET(OPENSSL_LIBARAIES "C:/OpenSSL-Win32/lib")

#SET(OPENSSL_CRYPTO_LIBRARIES "C:/OpenSSL-Win32/lib/libcrypto.lib" )

#SET(OPENSSL_SSL_LIBRARIES "C:/OpenSSL-Win32/lib/libssl.lib")

SET (BOOST_MIN_VERSION "1.59.0")

set (Boost_NO_BOOST_CMAKE ON)

FIND_PACKAGE(Boost ${BOOST_MIN_VERSION} REQUIRED)

if (NOT Boost_FOUND)

message(FATAL_ERROR "Fatal error: Boost (version >= 1.55) required.")

else()

message(STATUS "Setting up BOOST")

message(STATUS " Includes - ${Boost_INCLUDE_DIRS}")

message(STATUS " Library - ${Boost_LIBRARY_DIRS}")

include_directories(${Boost_INCLUDE_DIRS})

link_directories(${Boost_LIBRARY_DIRS})

endif (NOT Boost_FOUND)

set(Boost_USE_MULTI_THREADED ON)

find_package( Boost 1.59.0

REQUIRED unit_test_framework system regex date_time thread filesystem

program_options chrono atomic )

补充:

vs2015 + cpp-netlib-0.12.0-final编译尝试:

1.使用boost1.60.0以上boost库,编译会出现 “Boost\include\boost-1_62\boost/type_traits/is_const.hpp(38): error C2872: “true_type”: 不明确的符号” 错误,修改

cpp-netlib\cpp-netlib-0.12.0-final\boost/network/protocol/http/server/impl/parsers.ipp文件如下:

BOOST_NETWORK_INLINE void parse_headers(
std::string const& input, std::vector<request_header_narrow>& container) {
//using namespace boost::spirit::qi;
u8_to_u32_iteratorstd::string::const_iterator begin = input.begin(),
end = input.end();
using namespace boost::spirit::qi;
typedef asboost::spirit::traits::u32_string as_u32_string;
parse(begin, end,
*(+((alnum | punct) - ':') >> lit(": ") >>
as_u32_string()[+((unicode::alnum | space | punct) - '\r' - '\n')] >>
lit("\r\n")) >>
lit("\r\n"),
container);
}

参考文档:

1.官方文档http://cpp-netlib.org/0.12.0/getting_started.html#getting-started

2.[_()

cpp-netlib vs2013项目路径:

需使用msvc-12.0编译生成boost库,openssl默认安装即可。

全部评论 (0)

还没有任何评论哟~