关于SWIG的入门使用可参见 使用SWIG扩展ruby性能
一、关于SWIG
SWIG全称为 Simplified Wrapper and Interface Generator,通过swig可以方便快捷的使用c/c++扩展php, ruby等语言以提高性能或满足其它用途。二、关于libcurl
libcurl是一个著名的http/ftp库,通过libcurl可能轻松通过http/ftp协议访问网络。三、流程

四、相关文件
1. 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);2. ruby的extconf.rb文件
require 'mkmf'
%w{stdc++ curl}.each do|lib|
$libs = append_library $libs, lib
end
create_makefile 'curl'3. 编译build.sh
#通过curl.i生成封装后的cpp源码 swig -c++ -ruby curl.i && #通过extconf.rb生成Makefile ruby extconf.rb && #通过Makefile生成目标扩展 make
4. 测式文件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()
git clone git://github.com/JiangMiao/ruby_swig_curl_demo.git
五、相关链接
libcurlSWIG