发现个好东西

CppCMS 是一个试图使用 C++ 构建高性能 CMS 的 C++ library。在 mac 上装了一个开始玩玩。很多库我都是用 macports 自带的版本,因此对应 cmake 的指令大致如下:

$ tar xjvf cppcms-1.0.1.tar.bz2
$ cd cppcms-1.0.1 && mkdir build && cd build
$ cmake -DCMAKE_LIBRARY_PATH=/opt/local/lib -DCMAKE_INCLUDE_PATH=/opt/local/include \
        -DCMAKE_INSTALL_PREFIX=/some/path/you/want ../
$ make && make install

下面是安装好后的文件,

$ ls bin/
cppcms_config_find_param cppcms_run               cppcms_tmpl_cc
cppcms_make_key          cppcms_scale
$ ls lib/
libbooster.0.0.0.dylib libbooster.a           libcppcms.1.0.1.dylib  libcppcms.a
libbooster.0.dylib     libbooster.dylib       libcppcms.1.dylib      libcppcms.dylib
$ ls include/
booster cppcms

然后我们看下面的例子,如何利用 CppCMS 构建第一个 web service。我们首先创建一个 hello 的 class,

#ifndef CPPCMS_HELLO_HPP
#define CPPCMS_HELLO_HPP

#include <cppcms/application.h>
#include <cppcms/applications_pool.h>
#include <cppcms/service.h>
#include <cppcms/http_response.h>
#include <iostream>

class hello : public cppcms::application {
public:
  hello(cppcms::service &srv) ;
  virtual void main(std::string url);
};

#endif

其实现如下,

#include "hello.hpp"

hello::hello(cppcms::service &srv)
  : cppcms::application(srv) {}

void
hello::main(std::string) {
  response().out() <<
    "<html>\n"
    "<body>\n"
    "  <h1>Hello World</h1>\n"
    "</body>\n"
    "</html>\n";
}

最后写一个 driver,

#include "hello.hpp"

int
main(int argc, char ** argv) {
  try {
    cppcms::service srv(argc,argv);
    srv.applications_pool().mount(
      cppcms::applications_factory<hello>()
    ) ;
    srv.run() ;
  } catch(std::exception const &e) {
    std::cerr << e.what() << std::endl;
  }

  return 0 ;
}

之后提供一个配置文件,格式是 JSON

{
  "service" : {
    "api" : "http",
    "port" : 52080
  },
  "http" : {
    "script_names" : [ "/hello" ]
  }
}

之后我们连接了 hello 之后就能启动我们的 server 了。

./hello -c config.json

之后就能在浏览器里面访问本地的 52080 端口 http://localhost:52080/hello 看到效果了。后面会仔细研究下 CppCMS 的具体细节。

——————
And as for Ishmael, I have heard you: Behold, I have blessed him, and will make him fruitful, and will multiply him exceedingly; twelve princes shall he beget, and I will make him a great nation.

Advertisements
发现个好东西

一个有关“发现个好东西”的想法

  1. zt 说:

    注意 mac 下面 cmake 安装好之后并没有配置好对应的 RPATH,在 mac 下面可以使用 otool -L 看看,之后使用 install_name_tool 进行矫正即可,比如 libcppcms 依赖于 libbooster,因此我们需要

    $ otool -L ~/y/lib/libcppcms.1.0.1.dylib
    /Users/someone/y/lib/libcppcms.1.0.1.dylib:
    libcppcms.1.dylib (compatibility version 1.0.0, current version 1.0.1)
    libbooster.0.dylib (compatibility version 0.0.0, current version 0.0.0)
    ….

    可以看出来 libbooster 没找对位置,于是

    $ install_name_tool -change libbooster.0.dylib /Users/someone/y/lib/libbooster.0.dylib /Users/someone/y/lib/libcppcms.1.0.1.dylib
    $ otool -L ~/y/lib/libcppcms.1.0.1.dylib
    /Users/someone/y/lib/libcppcms.1.0.1.dylib:
    libcppcms.1.dylib (compatibility version 1.0.0, current version 1.0.1)
    /Users/someone/y/lib/libbooster.0.dylib (compatibility version 0.0.0, current version 0.0.0)
    ….

    这就对了,如此我们也需要将可执行文件对 libcppcms 的依赖改正确。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s