-1

从字面上看,现在几天来,我一直在网上搜索,诅咒和撕扯我的头发,尝试使用dmakedwimperl-5.14.2.1-v7-32bit (Strawberry Perl 5.14.2.1)编译Font::FreeType 。对于开瓶器, FreeType.xs文件中有几个错误,我在错误 #32713 for Font-FreeType: patch for Font-FreeType-0.03中找到了一个补丁。迷人的。这个模块的最后一次更新是 2004 年 9 月 11 日(注意这一天),所以它肯定已经死了,但我需要它来使用带有 perlcairo 的 REAL 字体。所以我决心(不顾一切地)让它发挥作用。到目前为止,除了这个模块之外,我在使用 cpan 时没有遇到任何问题。事实上草莓 Perl是我使用过的唯一一个可以直接与 CPAN 一起使用的 Windows perl。这显然是一个流氓模块。甚至 *nix 用户也遇到过问题。

我阅读了如何修复 Perl 的 Font::FreeType 编译错误?但那里没有帮助,所以我认为一个新线程是合理的。

Number found where operator expected at Makefile.PL line 17, near "my $font_filename = catfile($data_dir, '5"
  (Might be a runaway multi-line '' string starting on line 9)
    (Do you need to predeclare my?)

生成文件.pl:

1  use ExtUtils::MakeMaker;
2  use File::Spec::Functions;
3  
4  WriteMakefile(
5      NAME            => 'Font::FreeType',
6      AUTHOR          => 'Geoff Richards <qef@laxan.com>',
7      VERSION_FROM    => 'lib/Font/FreeType.pm',
8      LIBS            => [ '-lfreetype' ],
9      INC             => '-I/usr/include/freetype2',
10     NO_META         => 1,
11 );
12 
13 
14 # Generate a listing of the characters in the BDF test font, for checking
15 # that the library can find them all.  See t/10metrics_5x7bdf.t
16 my $data_dir = catdir(qw( t data ));
17 my $font_filename = catfile($data_dir, '5x7.bdf');

使用 perl 运行得很好,那么 dmake 的问题是什么?如果我只是用 perl 运行它,dmake会重新运行它。我不知道如何让dmake只使用那里的东西,而且我在dmake上找不到真正的文档,只有无用的帮助和手册页(至少对我来说没用)。

我尝试在$data_dir中添加一个斜杠,但同样的错误。最后我只是将$font_filename设置为完整路径。粗制滥造,我知道,但它有效。

所以这现在创建了FreeType.c但现在存在路径问题:

gcc -c  -I/usr/include/freetype2    -s -O2 -DWIN32 -DPERL_TEXTMODE_SCRIPTS -DUSE_SITECUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fno-strict-aliasing -mms-bitfields -s -O2     -DVERSION=\"0.03\"    -DXS_VERSION=\"0.03\"  "-IC:\Dwimperl\perl\lib\CORE"   FreeType.c
FreeType.xs:19:22: fatal error: ft2build.h: No such file or directory

FreeType.c 包含:

#include <ft2build.h>
#include FT_FREETYPE_H

我尝试更改Makefile.pl中的包含路径,但我真的不知道这样做的“正确”方法:

WriteMakefile(
    .
    LIBS            => '-LC:/gtk/lib -lfreetype',
    INC             => '-IC:/gtk/include/freetype2 -IC:/gtk/include -IC:/Dwimperl/c/include',

我认为现在的问题是将 *nix 路径转换为 ​​Windows 路径,以便编译器可以找到所有头文件。有没有人使用任何编译器在 Windows 中成功编译了这个该死的模块?或者至少有人知道如何为WriteMakefile指定 Windows 路径吗?

4

1 回答 1

1

我还尝试使用 cpan 将最新的 FreeType 模块安装在 cygwin 上,如下所示:

$ cpan

cpan shell -- CPAN exploration and modules installation (v1.9800)
Enter 'h' for help.

cpan[1]> install Font::FreeType

我遇到的第一个问题是在制作阶段。Make 抱怨找不到 ft2build.h。

那时我意识到我必须先下载并编译/安装 FreeType 库(doh!)。所以,我从 FreeType下载页面下载了最新的,并像这样安装它:

$ cd cygwin/freetype-2.4.0
$ ./configure
...
$ make
...
$ make install

下一个问题是,当我再次尝试在 cpan 中制作模块时,它在 ft2build.h 中的以下行失败:

#include <freetype/config/ftheader.h>

如果您查看实际文件(在我的系统上的 /usr/local/include/ft2build.h 中,但它可能在您的其他地方),您会在该行之前看到此注释:

/* `<prefix>/include/freetype2' must be in your current inclusion path */

所以,我设置了适当的环境变量(我相信“正确”的方式——比修改 make 文件中的“INC”行更好):

$ C_INCLUDE_PATH=/usr/local/include/freetype2
$ export C_INCLUDE_PATH

修复后,我遇到的下一个问题是左值错误:

$ cpan install Font::FreeType
CPAN: Storable loaded ok (v2.27)
...
FreeType.xs:808:21: error: lvalue required as left operand of assignment
...
Makefile:340: recipe for target `FreeType.o' failed
make: *** [FreeType.o] Error 1
  GEOFFR/Font-FreeType-0.03.tar.gz
  /usr/bin/make -- NOT OK
CPAN: YAML loaded ok (v0.84)
Running make test
  Can't test without successful make
Running make install
  Make had returned bad status, install seems impossible

我知道你已经解决了这个问题,但我会在这里发布信息以防其他人遇到它。将此处的补丁文件保存到 FreeType.xs.diff(您的 Font-FreeType-0.03 目录可能命名不同),应用它,然后像下面这样进行编译/编译。请注意,由于我们修改了模块,我们不能再使用 cpan,因此我们手动进行:

$ cd ~/.cpan/build/Font-FreeType-0.03
$ patch FreeType.xs FreeType.xs.diff
patching file FreeType.xs

$ make
Makefile out-of-date with respect to Makefile.PL
...
==> Your Makefile has been rebuilt. <==
==> Please rerun the make command.  <==
false
Makefile:866: recipe for target `Makefile' failed
make: *** [Makefile] Error 1

$ make
cp lib/Font/FreeType.pm blib/lib/Font/FreeType.pm
...
Manifying blib/man3/Font.FreeType.3pm

$ make install
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
...
Appending installation info to /usr/lib/perl5/5.14/i686-cygwin-threads-64int/perllocal.pod

瞧!编译好了!需要指出的另一件事是,正如 Borodin 之前指出的那样,我使用了常规的 gnu make 而不是 dmake。FreeType 安装说明说您必须运行 GNU Make 3.80 或更高版本。您可以像这样检查已安装的 make 版本:

$ make -v
GNU Make 3.82.90
Built for i686-pc-cygwin
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
于 2013-02-08T07:05:53.433 回答