如何为Visual C ++ 2008(Express Edition)编译Cairo

时间:2020-03-05 18:59:29  来源:igfitidea点击:

大多数预编译的Windows二进制文件都是使用MSYS + gcc工具链制成的。它使用MSVCRT运行时,它与Visual C ++ 2005/2008不兼容。

因此,如何着手仅针对Visual C ++编译Cairo 1.6.4(或者更高版本)。包括依赖项(png,zlib,pixman)。

解决方案

回答

我们是否在这里检查过:http://cairographics.org/visualstudio/?意思是"它使用了与Visual C ++ 2005/2008不兼容的MSCVRT运行时"?我们遇到的确切问题是什么?

回答

MSYS + gcc工具链使用旧的MSVCRT运行时库(现已内置在Windows中),而Visual C ++ 2005/2008自带。众所周知,代码不应依赖于多个运行时。通过事情文件句柄,内存指针等将受到影响,并且在这种情况下显然会导致随机崩溃。

我没有为此感到难过。再说一次,我也不再真正针对Windows。但是有人告诉我什至不尝试解决方案。

可行的方法是将所有依赖项静态链接到lib中(例如Cairomm)。静态库没有绑定到它们的运行时,对吗?但是我没有尝试。实际上,我可以使用所有要素的VC ++构建,但是花了几天的时间。

我没有找到我们提供的网址。本身很奇怪;我看着"到处都是"。再说一次,它适用于Visual Studio 2003.NET,因此已经落后了两代。

回答

我已经做到了,但是我没有任何现成的说明。我的构建也相当少,因为我不需要例如的支持。 PNG和SVG文件,我只是用它来将生成的矢量图形渲染到内存缓冲区。

但是我所做的是通读UNIX / GNU构建系统的config.h和其他文件,并编写了适合MSVC的文件,然后使用适当的源文件创建了一个项目。这样做最多可能需要几个小时,但完成后就可以了;)

编辑:请看此页面,它有一个用于构建开罗的MSVC 2003(7.1)项目:http://slinavlee.googlepages.com/

回答

这是使用Visual C ++构建Cairo / Cairomm的说明。

必需的:

  • Visual C ++ 2008 Express SP1(现在包括SDK)
  • MSYS 1.0

要使用VC ++命令行工具,需要运行批处理文件" vcvars32.bat"。

C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vcvars32.bat

ZLib

从http://www.zlib.net/下载(并解压缩)zlib123.zip

cd zlib123
    nmake /f win32/Makefile.msc

    dir
        # zlib.lib is the static library
        #
        # zdll.lib is the import library for zlib1.dll
        # zlib1.dll is the shared library

libpng

从http://www.libpng.org/pub/png/libpng.html下载(并解压缩)lpng1231.zip

VC ++ 9.0编译器提供了"这可能是不安全的"警告。别理他们;
这是MS安全恐慌(代码不错)。

cd lpng1231\lpng1231        # for some reason this is two stories deep

    nmake /f ../../lpng1231.nmake ZLIB_PATH=../zlib123

    dir
        # libpng.lib is the static library
        #
        # dll is not being created

皮克斯曼

Pixman是Cairo的一部分,但需要单独下载。

从http://www.cairographics.org/releases/下载(并解压缩)pixman-0.12.0.tar.gz

使用MSYS通过'tar -xvzf pixman * .tar.gz'解压缩

Pixman和Cairo都有适用于Visual C ++命令行编译器(cl)的Makefile,
但是他们使用Gnu makefile和类似Unix的工具(sed等)。这意味着我们有
在MSYS中运行make。

在启用VC ++命令行工具的情况下打开命令提示符(尝试'cl /?')。
通过'C:\ MSYS \ 1.0 \ MSYS.BAT'将命令提示符转换为MSYS提示符。

不要使用MSYS图标,因为这样提示符现在将知道VC ++。
我们不能从MSYS运行.bat文件。

尝试从这里开始使用VC ++工具:'cl-?'

尝试使用Gnu make也可以:'make -v'。

凉爽的。

cd     (use /d/... instead of D:)
    cd pixman-0.12.0/pixman
    make -f Makefile.win32

这默认为MMX和SSE2优化,需要进行更新
x86处理器(奔腾4或者奔腾M或者更高版本:http://fi.wikipedia.org/wiki/SSE2)

有很多警告,但似乎成功。

ls release
        # pixman-1.lib  (static lib required by Cairo)

留在VC ++的MSYS提示符下,以便Cairo也进行编译。

开罗

从http://www.cairographics.org/releases/下载(并提取)cairo-1.6.4.tar.gz

cd 
    cd cairo-1.6.4

这里的Makefile.win32几乎不错,但是Pixman路径是硬连线的。

使用修改后的" Makefile-cairo.win32":

make -f ../Makefile-cairo.win32 CFG=release \
            PIXMAN_PATH=../../pixman-0.12.0 \
            LIBPNG_PATH=../../lpng1231 \
            ZLIB_PATH=../../zlib123

(将所有内容写在一行上,忽略反斜杠)

它说:"没有规则可以制作'src / cairo-features.h'。请使用手动准备的
(在开罗> 1.6.4中,可能存在一个" src / cairo-features-win32.h"
只需重命名):

cp ../cairo-features.h src/

重试ma​​ke命令(向上箭头会记住它)。

ls src/release
        #
        # cairo-static.lib

cairomm(C ++ API)

从http://www.cairographics.org/releases/下载(并提取)cairomm-1.6.4.tar.gz

我们可以在2008年使用一个Visual C ++ 2005项目(通过打开和升级)。

cairomm-1.6.4\MSCV_Net2005\cairomm\cairomm.vcproj

需要进行的更改:

  • 将活动配置更改为"发布"
  • Cairomm-1.0属性(带有右键单击菜单)
C++/General/Additional Include Directories: 
            ..\..\..\cairo-1.6.4\src    (append to existing)

        Linker/General/Additional library directories:
            ..\..\..\cairo-1.6.4\src\release
            ..\..\..\lpng1231\lpng1231
            ..\..\..\zlib123

        Linker/Input/Additional dependencies:   
            cairo-static.lib libpng.lib zlib.lib msimg32.lib
  • 优化:快速的FPU代码
C++/Code generation/Floating point model
                Fast

右键点击" cairomm-1.0"和" build"。有一些警告。

dir cairomm-1.6.4\MSVC_Net2005\cairomm\Release
        #
        # cairomm-1.0.lib
        # cairomm-1.0.dll
        # cairomm.def

回答

这些说明似乎不适用于当前版本的imlib,我想知道是否值得重新考虑这个问题?