我試圖將一些Google URL Library功能作爲perl模塊公開。根據這裏和其他地方的一些帖子,它看起來像XSPP可能是一個很好的開始。下面是我創建至今(先從googleurl 11b的編譯版本):Perl XSPP - std :: string的多重定義
我創造了這個XSPP文件(有些方法不再贅述):
#include "gurl.h"
%typemap{std::string};
%typemap{bool};
%module{Google::URL};
class GURL
{
%name{new} GURL(std::string& url);
~GURL();
bool is_valid();
bool is_empty();
std::string spec();
std::string possibly_invalid_spec();
std::string scheme();
std::string username();
std::string password();
std::string host();
std::string port();
std::string path();
std::string query();
std::string ref();
bool has_scheme();
bool has_username();
bool has_password();
bool has_host();
bool has_port();
bool has_path();
bool has_query();
bool has_ref();
};
我創造了這個Makefile文件。 PL文件:
use 5.012;
use Module::Build::WithXSpp;
my $build = Module::Build::WithXSpp->new(
module_name => 'Google::URL::GURL',
license => 'perl',
extra_typemap_modules => {
'ExtUtils::Typemap::Default' => '0.01',
'ExtUtils::Typemap::STL' => '0.01',
},
extra_linker_flags => '-L../googleurl -lgoogleurl',
extra_compiler_flags => '-I. -I.. -I../googleurl -I../googleurl/base -I../googleurl/src',
);
然後我運行:
perl Makefile.PL && ./Build
..和得到以下錯誤:
WARNING: the following files are missing in your kit:
GURL.xs
Please inform the author.
Created MYMETA.yml and MYMETA.json
Creating new 'Build' script for 'Google-URL-GURL' version '0.01'
Building Google-URL-GURL
Processing XS typemap files...
Multiple definition of ctype 'std::string' in TYPEMAP section at ~/lib/perlbrew/perls/perl-5.14.2/lib/site_perl/5.14.2/ExtUtils/Typemaps.pm line 819.
有沒有人與xspp經驗有任何想法可能會導致此錯誤?我可以在上面的GURL.xsp文件上成功運行xspp,並且它會產生對我來說合理的輸出。
你爲什麼命名Build.PL文件Makefile.PL?這根本沒有意義! –
@Leon--我的無知 - 我會重新命名它。 –