2013-03-18 112 views
1

我是Perl新手,开始研究需要某些模块的项目。其中之一是XML::CanonicalizeXML似乎无法安装。XML :: CanonicalizeXML在Windows上安装Perl包

我正在使用Strawberry Perl和CPAN进行包处理。

我试图手动编译从下载的tar.gz文件包,但已经出现了同样的错误,似乎在G ++编译要存在的:

CPAN.pm: Building S/SJ/SJZASADA/XML-CanonicalizeXML-0.05.tgz 

'xml2-config' is not recognized as an internal or external command, 
operable program or batch file. 
'xml2-config' is not recognized as an internal or external command, 
operable program or batch file. 
Checking if your kit is complete... 
Looks good 
'xml2-config' is not recognized as an internal or external command, 
operable program or batch file. 
'xml2-config' is not recognized as an internal or external command, 
operable program or batch file. 
MakeMaker (v6.64) 
Warning (non-fatal): Target 'dynamic' depends on targets in skipped section 'dyn 
amic_lib' 
Warning (non-fatal): Target 'static' depends on targets in skipped section 'stat 
ic_lib' 
Writing Makefile for Mytest2::canon 
Writing MYMETA.yml and MYMETA.json 
Writing Makefile for XML::CanonicalizeXML 
Writing MYMETA.yml and MYMETA.json 
cp lib/XML/CanonicalizeXML.pm blib\lib\XML\CanonicalizeXML.pm 
AutoSplitting blib\lib\XML\CanonicalizeXML.pm (blib\lib\auto\XML\CanonicalizeXML 
) 
cd canon && dmake 
gcc -c -I.  -s -O2 -DWIN32 -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT - 
DPERL_IMPLICIT_SYS -fno-strict-aliasing -mms-bitfields -s -O2  -DVERSION=\"\" 
     -DXS_VERSION=\"\" "-IC:\strawberry\perl\lib\CORE" canon.c 
ar cr libcanon.a canon.o 
rem libcanon.a 
C:\strawberry\perl\bin\perl.exe C:\strawberry\perl\lib\ExtUtils\xsubpp -typemap 
C:\strawberry\perl\lib\ExtUtils\typemap CanonicalizeXML.xs > CanonicalizeXML.x 
sc && C:\strawberry\perl\bin\perl.exe -MExtUtils::Command -e mv -- CanonicalizeX 
ML.xsc CanonicalizeXML.c 
Please specify prototyping behavior for CanonicalizeXML.xs (see perlxs manual) 
gcc -c -I.  -s -O2 -DWIN32 -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT - 
DPERL_IMPLICIT_SYS -fno-strict-aliasing -mms-bitfields -s -O2  -DVERSION=\"0. 
05\" -DXS_VERSION=\"0.05\" "-IC:\strawberry\perl\lib\CORE" CanonicalizeXML 
.c 
CanonicalizeXML.xs: In function 'XS_XML__CanonicalizeXML_canonicalize': 
CanonicalizeXML.xs:28:17: warning: passing argument 6 of 'canonicalize' from inc 
ompatible pointer type [enabled by default] 
canon/canon.h:2:12: note: expected 'char *' but argument is of type 'xmlChar **' 

Running Mkbootstrap for XML::CanonicalizeXML() 
C:\strawberry\perl\bin\perl.exe -MExtUtils::Command -e chmod -- 644 Canonicalize 
XML.bs 
C:\strawberry\perl\bin\perl.exe -MExtUtils::Mksymlists \ 
    -e "Mksymlists('NAME'=>\"XML::CanonicalizeXML\", 'DLBASE' => 'CanonicalizeX 
ML', 'DL_FUNCS' => { }, 'FUNCLIST' => [], 'IMPORTS' => { }, 'DL_VARS' => []);" 

dlltool --def CanonicalizeXML.def --output-exp dll.exp 
g++ -o blib\arch\auto\XML\CanonicalizeXML\CanonicalizeXML.dll -Wl,--base-file -W 
l,dll.base -mdll -s -L"C:\strawberry\perl\lib\CORE" -L"C:\strawberry\c\lib" Cano 
nicalizeXML.o canon/libcanon.a C:\strawberry\perl\lib\CORE\libperl516.a -lmoldn 
ame -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole 
32 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbc 
cp32 -lcomctl32 dll.exp 
CanonicalizeXML.o:CanonicalizeXML.c:(.text+0x118): undefined reference to `xmlIn 
itParser' 
CanonicalizeXML.o:CanonicalizeXML.c:(.text+0x15c): undefined reference to `xmlSt 
rlen' 
CanonicalizeXML.o:CanonicalizeXML.c:(.text+0x189): undefined reference to `_imp_ 
_xmlFree' 
CanonicalizeXML.o:CanonicalizeXML.c:(.text+0x190): undefined reference to `xmlCl 
eanupParser' 
canon/libcanon.a(canon.o):canon.c:(.text+0x27): undefined reference to `xmlStrle 
n' 
canon/libcanon.a(canon.o):canon.c:(.text+0x35): undefined reference to `_imp__xm 
lMalloc' 
canon/libcanon.a(canon.o):canon.c:(.text+0xb3): undefined reference to `xmlParse 
Memory' 
canon/libcanon.a(canon.o):canon.c:(.text+0xc4): undefined reference to `__xmlLoa 
dExtDtdDefaultValue' 
canon/libcanon.a(canon.o):canon.c:(.text+0xd6): undefined reference to `xmlSubst 
ituteEntitiesDefault' 
canon/libcanon.a(canon.o):canon.c:(.text+0xf2): undefined reference to `xmlParse 
Memory' 
canon/libcanon.a(canon.o):canon.c:(.text+0x104): undefined reference to `xmlDocG 
etRootElement' 
canon/libcanon.a(canon.o):canon.c:(.text+0x13a): undefined reference to `xmlStrE 
qual' 
canon/libcanon.a(canon.o):canon.c:(.text+0x146): undefined reference to `xmlNode 
GetContent' 
canon/libcanon.a(canon.o):canon.c:(.text+0x15e): undefined reference to `xmlXPat 
hNewContext' 
canon/libcanon.a(canon.o):canon.c:(.text+0x194): undefined reference to `xmlXPat 
hRegisterNs' 
canon/libcanon.a(canon.o):canon.c:(.text+0x1ca): undefined reference to `_imp__x 
mlFree' 
canon/libcanon.a(canon.o):canon.c:(.text+0x1d4): undefined reference to `xmlXPat 
hFreeContext' 
canon/libcanon.a(canon.o):canon.c:(.text+0x1dc): undefined reference to `xmlFree 
Doc' 
canon/libcanon.a(canon.o):canon.c:(.text+0x1e4): undefined reference to `_imp__x 
mlRealloc' 
canon/libcanon.a(canon.o):canon.c:(.text+0x238): undefined reference to `xmlFree 
Doc' 
canon/libcanon.a(canon.o):canon.c:(.text+0x27d): undefined reference to `xmlXPat 
hEvalExpression' 
canon/libcanon.a(canon.o):canon.c:(.text+0x28d): undefined reference to `_imp__x 
mlFree' 
canon/libcanon.a(canon.o):canon.c:(.text+0x2a2): undefined reference to `xmlXPat 
hFreeContext' 
canon/libcanon.a(canon.o):canon.c:(.text+0x2aa): undefined reference to `xmlFree 
Doc' 
canon/libcanon.a(canon.o):canon.c:(.text+0x2db): undefined reference to `xmlC14N 
DocDumpMemory' 
canon/libcanon.a(canon.o):canon.c:(.text+0x2e7): undefined reference to `xmlXPat 
hFreeObject' 
canon/libcanon.a(canon.o):canon.c:(.text+0x2f3): undefined reference to `xmlFree 
Doc' 
canon/libcanon.a(canon.o):canon.c:(.text+0x301): undefined reference to `xmlMemo 
ryDump' 
canon/libcanon.a(canon.o):canon.c:(.text+0x393): undefined reference to `xmlFree 
Doc' 
canon/libcanon.a(canon.o):canon.c:(.text+0x435): undefined reference to `xmlFree 
Doc' 
canon/libcanon.a(canon.o):canon.c:(.text+0x46e): undefined reference to `_imp__x 
mlFree' 
canon/libcanon.a(canon.o):canon.c:(.text+0x478): undefined reference to `xmlFree 
Doc' 
collect2: ld returned 1 exit status 
dmake.exe: Error code 129, while making 'blib\arch\auto\XML\CanonicalizeXML\Can 
onicalizeXML.dll' 
    SJZASADA/XML-CanonicalizeXML-0.05.tgz 
    C:\strawberry\c\bin\dmake.exe -- NOT OK 
Running make test 
    Can't test without successful make 
Running make install 
    Make had returned bad status, install seems impossible 
Stopping: 'install' failed for 'XML::CanonicalizeXML'. 
Failed during this command: 
SJZASADA/XML-CanonicalizeXML-0.05.tgz  : make NO 

回答

1

问题是CPAN只下载了需要用Windows批处理文件替换的xml2-config的UNIX Shell脚本版本。如果任何人在这里需要它,它是:

@ECHO OFF 

setlocal ENABLEDELAYEDEXPANSION 
rem http://batcheero.blogspot.co.il/2007/06/how-to-enabledelayedexpansion.html - windows xp 

SET SELFDIR=%~dp0 
IF %SELFDIR:~-1%==\ SET SELFDIR=%SELFDIR:~0,-1% 
set SELFDIR=%SELFDIR:\=/% 

set prefix=%SELFDIR% 
set exec_prefix=%prefix% 
set includedir=%prefix%/include 
set libdir=%exec_prefix%/lib 

IF "%1"=="" GOTO usage0 

rem whats the point of resettingthes flags... 
rem set cflags=false 
rem set libs=false 

:loop 

    IF "%1"=="" Exit /B 0 

    IF "%1"=="--version" (
    echo 2.4.12 
    Exit /B 0 
    ) 

    IF "%1"=="--help" (
      GOTO usage0 
    ) 

    rem the code below does: if next arg is not any known argument nor empty then the next arg is prefix value otherwise print the prefix 
    IF "%1"=="--prefix" ( 
      IF "%2"=="" (SHIFT 
         echo %prefix%) ELSE (
      IF "%2"=="--cflags" (SHIFT 
            echo %prefix%) ELSE (
       IF "%2"=="--libs" (SHIFT 
            echo %prefix%) ELSE (
       IF "%2"=="--prefix" (SHIFT 
             echo %prefix%) ELSE (
       SET /A prefix=%2 
       set exec_prefix=!prefix! 
       set includedir=!prefix!/include 
       set libdir=!exec_prefix!/lib 
       SHIFT 
       SHIFT 
       ) 
      ) 
      ) 
     ) 
    ) 

    IF "%1"=="--cflags" (

     echo -I!includedir!/libxml2/libxml -I!includedir!/libxml2 
    SHIFT 
    ) 

    IF "%1"=="--libs" (
     echo -L!libdir! -lxml2 -lz -liconv -lm -Wl,-s -lwsock32 -liberty -lMsup -lMstubs 
    SHIFT 
    ) 


    GOTO :loop 

Exit /B 1 


:usage0 

echo Usage: xml-config [OPTION] 
echo _ 
echo Known values for OPTION are: 
echo _ 
echo --prefix=DIR  change libxml prefix [default $prefix] 
echo --libs  print library linking information 
echo --cflags  print pre-processor and compiler flags 
echo --help  display this help and exit 
echo --version  output version information 
Exit /B 0 

:usage1 

echo Usage: xml-config [OPTION] 
echo _ 
echo Known values for OPTION are: 
echo _ 
echo --prefix=DIR  change libxml prefix [default $prefix] 
echo --libs  print library linking information 
echo --cflags  print pre-processor and compiler flags 
echo --help  display this help and exit 
echo --version  output version information 
Exit /B 1 
0

XML::CanonicalizeXML模块依赖于libxml2。由于xml2-configlibxml2命令,因此您看起来好像有libxml2安装不正确或根本没有安装。

+0

我已经从http://xmlsoft.org/sources/win32/下载并复制内容到我的草莓/ C /目录和自述说,不需要任何特殊的安装。 – 2013-03-18 17:21:34

+0

这是一个奇怪的地方,把它。无论如何,相同的'readme'文件说*“...如果你想运行命令 行提供的工具,你可以,如果你愿意,可以将XML :: CanonicalizeXML'bin'子目录添加到PATH 环境变量“*。你不能将发行版随机转储到磁盘上,并期望它可以正常工作。模块安装试图运行'xml2-config',显然它找不到它。 – Borodin 2013-03-18 18:07:10

+0

这不是一个随机的地方,那就是CPAN使用的g ++编译器,以及其他所有C++库所在的地方。但我也发现了那里的xml2-config,这是一个unix shell脚本,并在一些Google搜索后找到它的Windows bat文件版本,现在它可以工作。 – 2013-03-19 07:32:21