我想在Windows上使用perl BerkleyDB模块,但我没有设法做到这一点.
我知道这有很多问题,我在这里阅读了很多关于SO和其他来源的问题.但我找不到解决办法.
例如:在Windows 7(64位)上使用CPAN BerkeleyDB模块 但是没有答案.有一个64位补丁的提示,但链接被破坏.
Windows 7专业版
Perl 5.16
C:\> perl -v This is perl 5, version 16, subversion 3 (v5.16.3) built for MSWin32-x64-multi-thread (with 1 registered patch, see perl -V for more detail) Copyright 1987-2012, Larry Wall Binary build 1603 [296746] provided by ActiveState http://www.ActiveState.com Built Mar 13 2013 13:31:10 Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using "man perl" or "perldoc perl". If you have access to the Internet, point your browser at http://www.perl.org/, the Perl Home Page.
MinGW的
我第一次尝试从CPAN MinGW64(4.5.4)安装BerkelyDB并自动安装dmake(4.12.20090907).
C:\>cpan Set up gcc environment - gcc.exe (rubenvb-4.5.4) 4.5.4
BerkeleyDB 0.54(Perl-Binding)
使用cpan下载.
BerkeleyDB(来自Oracle的Lib)
首先,我从Oracle安装了BerkeleyDB 6.1.19 (使用.msi).认为最新版本是最好的.在遇到一些问题后,我再次阅读了cpan BerkeleyDB的描述:
BerkeleyDB - Perl extension for Berkeley DB version 2, 3, 4 or 5
所以我卸载了它并使用了BerkeleyDB 5.3.28(使用.msi).但这也不起作用.然后我发现了一篇文章,作者说他在Windows上成功编译了BerkeleyDB 4.7.25.所以我拿了这个.
如上所述,我使用的是BerkeleyDB库版本4.7.25,但其他版本也出现了以下问题.
从CPAN下载BerkeleyDB-0.54后我做到了
perl Makefile.PL dmake
我收到一个错误:
BerkeleyDB.xs:76:16: fatal error: db.h: No such file or directory
原因:perl模块需要知道lib的位置.所以我编辑config.in
到
INCLUDE = C:\App\BerkeleyDB4.7.25\include LIB = C:\App\BerkeleyDB4.7.25\lib DBNAME = -ldb47
文件名C:\App\BerkeleyDB4.7.25\lib
是libdb47.lib
.但我不确定DBNAME
预期的结果.所以我尝试了不同的值:
DBNAME = -llibdb47
现在正在运行
dmake
我明白了
C:\Perl64\cpan\build\BerkeleyDB-0.54-rjSkdy>dmake Skip blib\lib\BerkeleyDB.pm (unchanged) Skip blib\lib\BerkeleyDB\Hash.pm (unchanged) Skip blib\lib\scan.pl (unchanged) Skip blib\lib\BerkeleyDB.pod (unchanged) Skip blib\lib\mkconsts.pl (unchanged) Skip blib\lib\BerkeleyDB\Btree.pm (unchanged) C:\Perl64\site\bin\gcc.exe -c -IC:\App\BerkeleyDB4.7.25\include -DNDEBUG -DWIN32 -D_CONSOLE -DNO_STRICT -DWIN64 -DCONSERVATIVE -DPERL_TEXTMODE_SCRIPTS -DUSE_SITECUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DHASATTRIBUTE -fno-strict-aliasing -mms-bitfields -O2 -DVERSION=\"0.54\" -DXS_VERSION=\"0.54\" "-IC:\Perl64\lib\CORE" BerkeleyDB.c
编译时没有错误,但随后
Running Mkbootstrap for BerkeleyDB () C:\Perl64\bin\perl.exe -MExtUtils::Command -e chmod -- 644 BerkeleyDB.bs C:\Perl64\site\bin\dlltool.exe --def BerkeleyDB.def --output-exp dll.exp C:\Perl64\site\bin\g++.exe -o blib\arch\auto\BerkeleyDB\BerkeleyDB.dll -Wl,--base-file -Wl,dll.base -mdll -L"C:\Perl64\lib\CORE" BerkeleyDB.o C:\Perl64\lib\CORE\perl516.lib C:\App\BerkeleyDB4.7.25\lib\libdb47.lib dll.exp BerkeleyDB.o:BerkeleyDB.c:(.text+0x536): undefined reference to `db_strerror' ... BerkeleyDB.o:BerkeleyDB.c:(.text+0xd5d): undefined reference to `db_strerror' BerkeleyDB.o:BerkeleyDB.c:(.text+0xf6d): more undefined references to `db_strerror' follow BerkeleyDB.o:BerkeleyDB.c:(.text+0x1a73): undefined reference to `db_version' BerkeleyDB.o:BerkeleyDB.c:(.text+0x1eb8): undefined reference to `db_strerror' ... BerkeleyDB.o:BerkeleyDB.c:(.text+0x3793): undefined reference to `db_strerror' BerkeleyDB.o:BerkeleyDB.c:(.text+0x39a6): more undefined references to `db_strerror' follow BerkeleyDB.o:BerkeleyDB.c:(.text+0xa877): undefined reference to `db_sequence_create' BerkeleyDB.o:BerkeleyDB.c:(.text+0xabb9): undefined reference to `db_strerror' ... BerkeleyDB.o:BerkeleyDB.c:(.text+0xe10a): undefined reference to `db_strerror' BerkeleyDB.o:BerkeleyDB.c:(.text+0xeb30): more undefined references to `db_strerror' follow BerkeleyDB.o:BerkeleyDB.c:(.text+0x18224): undefined reference to `db_create' BerkeleyDB.o:BerkeleyDB.c:(.text+0x1825e): undefined reference to `db_strerror' BerkeleyDB.o:BerkeleyDB.c:(.text+0x184f4): undefined reference to `db_create' BerkeleyDB.o:BerkeleyDB.c:(.text+0x1852e): undefined reference to `db_strerror' BerkeleyDB.o:BerkeleyDB.c:(.text+0x189b9): undefined reference to `db_env_create' BerkeleyDB.o:BerkeleyDB.c:(.text+0x18ccc): undefined reference to `db_create' BerkeleyDB.o:BerkeleyDB.c:(.text+0x18dd8): undefined reference to `db_strerror' BerkeleyDB.o:BerkeleyDB.c:(.text+0x19799): undefined reference to `db_strerror' BerkeleyDB.o:BerkeleyDB.c:(.text+0x20e53): undefined reference to `db_env_create' BerkeleyDB.o:BerkeleyDB.c:(.text+0x20fcb): undefined reference to `db_strerror' BerkeleyDB.o:BerkeleyDB.c:(.text+0x219ad): undefined reference to `db_create' BerkeleyDB.o:BerkeleyDB.c:(.text+0x26a9a): undefined reference to `db_version' c:/perl64/site/lib/auto/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.5.4/../../../../x86_64-w64-mingw32/bin/ld.exe: BerkeleyDB.o: bad reloc address 0x20 in section `.data' c:/perl64/site/lib/auto/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.5.4/../../../../x86_64-w64-mingw32/bin/ld.exe: final link failed: Invalid operation collect2: ld returned 1 exit status dmake.exe: Error code 129, while making 'blib\arch\auto\BerkeleyDB\BerkeleyDB.dll'
我非常感谢你的帮助.
像"改变草莓,改用Linux,......"这样的评论是受欢迎的,但我希望我们能够在当前环境中解决这个问题.