Ruby下使用SWIG封装libcurl
本文通过在ruby下使用SWIG封装libcurl来简要描述如何通过SWIG来扩展ruby。
关于SWIG的入门使用可参见 使用SWIG扩展ruby性能
关于SWIG:
SWIG全称为 Simplified Wrapper and Interface Generator,通过swig可以方便快捷的使用c/c++扩展php, ruby等语言以提高性能或满足其它用途。
关于libcurl:
libcurl是一个著名的http/ftp库,通过libcurl可能轻松通过http/ftp协议访问网络。
相关文件:
SWIG的封装文件 curl.i
%module curl
%{
#include <curl/curl.h>
%}
/* type definations */
typedef int CURLoption;
typedef int CURLcode;
/* import constants */
%constant int CURL_GLOBAL_ALL = CURL_GLOBAL_ALL;
%constant int CURLOPT_URL = CURLOPT_URL;
/* import functions */
int curl_global_init(long flags);
void curl_global_cleanup();
CURL* curl_easy_init();
void curl_easy_cleanup(CURL* curl);
CURLcode curl_easy_setopt(CURL* curl, CURLoption opt, int v);
CURLcode curl_easy_setopt(CURL* curl, CURLoption opt, const char* v);
CURLcode curl_easy_perform(CURL* curl);
ruby的extconf.rb文件
require 'mkmf'
%w{stdc++ curl}.each do|lib|
$libs = append_library $libs, lib
end
create_makefile 'curl'
编译build.sh:
#通过curl.i生成封装后的cpp源码 swig -c++ -ruby curl.i && #通过extconf.rb生成Makefile ruby extconf.rb && #通过Makefile生成目标扩展 make
测式文件ruby_test.rb
#!/usr/bin/env ruby require 'curl' include Curl url = ARGV[0] || 'http://www.google.com' p curl_global_init(CURL_GLOBAL_ALL) p curl = curl_easy_init() p curl_easy_setopt(curl, CURLOPT_URL, url) p curl_easy_perform(curl) p curl_easy_cleanup(curl) p curl_global_cleanup()
本文相关的完整源码可在github下载: http://github.com/JiangMiao/ruby_swig_curl_demo
git clone git://github.com/JiangMiao/ruby_swig_curl_demo.git




近期评论