学无先后,达者为师

网站首页 编程语言 正文

C++ Poco库的编译和使用

作者:TheOldManAndTheSea 更新时间: 2022-05-13 编程语言

C++ Poco库的编译和使用

flyfish

文章目录

  • C++ Poco库的编译和使用
    • 环境
    • 源码下载地址
    • 编译依次执行
    • CMakeLists.txt文件配置
    • 代码实现
    • POCO交叉编译配置

环境

Ubuntu18.04
Qt 5.14.2

源码下载地址

https://github.com/pocoproject/poco

编译依次执行

在这里插入图片描述

./configure --no-tests --no-samples --config=Linux --omit=Data --shared --static
make
sudo make install

–omit表示排除项目,Data中的SQlite,MySQL,ODBC等排除掉,这里不编译
如果要指定安装目录需要加参数 --prefix,这里是默认目录安装到

/usr/local/lib
/usr/local/include

以http为例说明如何使用

CMakeLists.txt文件配置

cmake_minimum_required(VERSION 3.5)

project(example LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)



# set the POCO paths and libs
set(POCO_PREFIX "/usr/local") # the directory containing "include" and "lib"
set(POCO_INCLUDE_DIR"${POCO_PREFIX}/include")
set(POCO_LIB_DIR "${POCO_PREFIX}/lib")
set(POCO_LIBS
        "${POCO_LIB_DIR}/libPocoNet.so"
        "${POCO_LIB_DIR}/libPocoUtil.so"
        "${POCO_LIB_DIR}/libPocoFoundation.so"
        "${POCO_LIB_DIR}/libPocoNetSSL.so")


add_executable(example
  main.cpp
)
target_link_libraries(example "${POCO_LIBS}")

代码实现

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 


int main(int argc, char *argv[])
{

    try
    {

        Poco::URI    url("https://docs.pocoproject.org/current/");
        Poco::Net::HTTPSClientSession session(url.getHost(),url.getPort());
        Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_GET,url.getPathAndQuery());
        session.sendRequest(req);
        Poco::Net::HTTPResponse res;
        std::istream & rs = session.receiveResponse(res);
        Poco::Net::HTTPResponse::HTTPStatus status = res.getStatus();
        std::string result;
        Poco::StreamCopier::copyToString(rs, result);
        if (Poco::Net::HTTPResponse::HTTPStatus::HTTP_OK == status)
        {
            std::cout << "status HTTP_OK:"<

当成功的时候,result存储的返回网页的内容,其中getReason的内容已经包括result的内容。
以上是PC版本Poco库的编译和使用

POCO交叉编译配置

CMAKE_CXX_FLAGS:STRING=  -pthread -ldl  -lrt

文档中说SyslogChannel只应用于unix系统,防止在嵌入式系统中出现问题,
这里在config.h定义

#define POCO_NO_SYSLOGCHANNEL

原文链接:https://blog.csdn.net/flyfish1986/article/details/124673651