2011-11-15 38 views
3

我試圖將一些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,並且它會產生對我來說合理的輸出。

+0

你爲什麼命名Build.PL文件Makefile.PL?這根本沒有意義! –

+0

@Leon--我的無知 - 我會重新命名它。 –

回答

相關問題