1

尝试安装XML::Sablotron时出现错误。我需要做什么才能成功构建此模块?

perl -V

我的perl5(revision 5 version 14 subversion 2)配置总结:
平台:
osname=cygwin,osvers=1.7.15(0.26053),archname=cygwin-thread-multi-64int
uname='cygwin_nt-5.1 winxp 1.7.15(0.26053) 2012-05-09 10:25 i686 cygwin'
config_args='-de -Dlibperl=cygperl5_14.dll -Dcc=gcc-4 -Dld=g++-4 -Darchname= i686-cygwin-threads-64int -Dmksymlinks -Dusethreads -Accflags=-g'
提示=推荐,useposix=true,d_sigaction=define
useithreads=define,usemultiplicity=define
useperlio=define,d_sfio=undef,uselargefiles=define,usesocks=undef
use64bitint=define,use64bitall=undef,uselongdouble=undef
使用mymalloc=n,bincompat5005=undef
编译器:
cc='gcc-4', ccflags ='-DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -g -fno-stric t-aliasing -pipe -fstack-protector',
优化='-O3',
cppflags='-DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -g -fno-strict-aliasing - pipe -fstack-protector'
ccversion='',gccversion='4.5.3',gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678
d_longlong=定义,longlongsize=8,d_longdbl=定义,longdblsize=12
ivtype='long long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lsee ksize=8
alignbytes=8,原型=定义
链接器和库:
ld='g++-4', ldflags =' -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl ,--enable-auto-image-base -fstack-protector -L/ usr/local/lib'
libpth=/usr/local/lib /usr/lib /lib
libs=-lgdbm -ldb -ldl -lcrypt -lgdbm_compat
perllibs=-ldl -lcrypt
libc=/usr/lib/libc.a,so=dll,useshrplib=true,libperl=cygperl5_14.dll
gnulibc_version=''
动态链接:
dlsrc=dl_dlopen.xs,dlext=dll,d_dlsymun=undef,ccdlflags=''
cccdlflags=' ', lddlflags=' --shared -Wl,--enable-auto-import -Wl,--export- all-symbols -Wl,--enable-auto-image-base -L/usr/local/ lib -fstack-protector'


此二进制文件的特征(来自 libperl):
编译时选项:MULTIPLICITY PERL_DONT_CREATE_GVSV
                    PERL_IMPLICIT_CONTEXT PERL_PRESERVE_IVUV
                    PERL_USE_SAFE_PUTENV USE_64_BIT_INT USE_ITHREADS
                    USE_LARGE_FILES USE_PERLIO USE_PERL_ATOF
                    USE_REENTRANT_API
 本地应用的补丁:
    错误#55162 File::Spec::case_allow 性能
    CYG07 $vendorarch/auto/.rebase
    CYG15静态Win32CORE
    CYG17 cyg-1.7 路径-utf8
    0c612ce82 修复在 cygwin 上构建静态扩展,-UUSEIMPORTLIB
    1bac5ecc1 修复 64 位线程 sv.c:S_anonymise_cv_maybe
    Cygwin::sync_winenv 添加
在cygwin下构建
编译于 2012 年 7 月 12 日 14:17:21
@INC:
/usr/lib/perl5/site_perl/5.14/i686-cygwin-threads-64int
/usr/lib/perl5/site_perl/5.14
/usr/lib/perl5/vendor_perl/5.14/i686-cygwin-threads-64int
/usr/lib/perl5/vendor_perl/5.14
/usr/lib/perl5/5.14/i686-cygwin-threads-64int
/usr/lib/perl5/5.14
/usr/lib/perl5/site_perl/5.10
/usr/lib/perl5/vendor_perl/5.10
/usr/lib/perl5/site_perl/5.8

Cygwin 版本是 2.774。pango库有问题,但我认为这不是以下问题

我尝试构建时遇到的错误XML::Sablotron(之后perl makeFile.PL):

make[1]: 进入目录`/usr/src/XML-Sablotron-1.01/DOM'
make[1]: 离开目录`/usr/src/XML-Sablotron-1.01/DOM'
make[1]: 进入目录`/usr/src/XML-Sablotron-1.01/Situation'
make[1]: 离开目录`/usr/src/XML-Sablotron-1.01/Situation'
make[1]: 进入目录`/usr/src/XML-Sablotron-1.01/SXP'
make[1]: 离开目录`/usr/src/XML-Sablotron-1.01/SXP'
make[1]: 进入目录`/usr/src/XML-Sablotron-1.01/Processor'
make[1]: 离开目录`/usr/src/XML-Sablotron-1.01/Processor'
gcc-4 -c -DPERL_USE_SAFE_PUTENV -U__STRICT_ANSI__ -g -fno-strict-aliasing -pipe -fstack-protector -DUSEIMPORTLIB -O3 -DVERSION=\"1.01\" -DXS_VERSION=\"1.01\" "-I/usr/lib /perl5/5.14/i686-cygwin-threads-64int/CORE" -DPERL_POLLUTE Sablotron.c
在 Sablotron.xs:88:0 包含的文件中:
DOM/DOM.h: 在 Funktion »__createNodeOld«:
DOM/DOM.h:90:17:警告:Typkonvertierung von Zeiger auf Ganzzahl anderer Breite
在 Sablotron.xs:88:0 包含的文件中:
DOM/DOM.h:在 Funktion »__checkNodeInstanceData«:
DOM/DOM.h:120:22:警告:Zeiger von Ganzzahl anderer Breite 中的 Typkonvertierung
DOM/DOM.h:在 Funktion »__createNodeNew«:
DOM/DOM.h:153:5:警告:Typkonvertierung von Zeiger auf Ganzzahl anderer Breite
在 Sablotron.xs:89:0 包含的文件中:
Processor/Processor.h:在 Funktion »MessageHandlerMakeCodeStub« 中:
Processor/Processor.h:122:7: Fehler: »sv_undef« 未声明(在此函数中首次使用)
Processor/Processor.h:122:7: Anmerkung: 只报告每个未声明的标识符     
每个函数出现一次
Processor/Processor.h:在 Funktion »MessageHandlerLogStub«:
...
在 Sablotron.xs:91:0 包含的文件中:
Situation/Situation.h:在 Funktion »_SV2SXP_Node«:
Situation/Situation.h:113:19:警告:Zeiger von Ganzzahl anderer 中的 Typkonvertierung     
布雷特
./DOM/DOM.xsh: 在 Funktion »XS_XML__Sablotron__DOM_parse«:
./DOM/DOM.xsh:53:30:警告:Zeiger von Ganzzahl anderer Breite 中的 Typkonvertierung
……
(Processor/Processor.xsh 和 Situation/Situation.xsh 的错误相同)

当然,最好的方法是不要使用 Sablotron。但因为时间关系,我宁愿不改变一切。

4

1 回答 1

2

你刚刚表现出一个非常危险的特质。你犯了一个错误,例如:

Processor/Processor.h:在 Funktion »MessageHandlerMakeCodeStub« 中:
Processor/Processor.h:122:7: Fehler: »sv_undef« 未声明

并做了一系列毫无根据的假设并得出以下结论:1)问题是 Cygwin 和 Windows 特定的;perl2)问题是由配置的事实引起的use64bitint=define;和 3) 解决方案是更改整数大小。(顺便说一句,错误消息中德语和英语的混合是怎么回事?)

我刚刚尝试使用我的perlbrew ed和 MacPorts 构建的库在我的 OSX 10.8 笔记本电脑上安装XML::Sablotron 。perlsablotron

在Google 上搜索sv_undef会导致一个主题Old CPAN modules with sv_undef这导致ExtUtils::MakeMaker

POLLUTE

5.005 版通过为扩展源兼容性提供预处理器宏,继承了旧的全局符号名称。从 5.6 版开始,这些预处理器定义默认不可用。该POLLUTE标志指定仍应定义旧名称:

  perl Makefile.PL POLLUTE=1

如果需要在 5.6 或更高版本下成功安装模块,请告知模块作者。

不幸的是,这个简单的解决方案并没有成功构建。

相反,使用Devel::PPPort生成一个ppport.h您可以用来根据您的系统生成补丁的。

这与 Cywgin 或 32 vs 64 位无关。您的问题与使用很久以前XML::Sablotron不推荐使用的东西有关。

于 2013-04-03T14:38:41.387 回答