visual-studio-2008 - 如何为 Visual C++ 2008 (Express edition) 编译 Cairo

标签 visual-studio-2008 visual-c++ open-source graphics

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

那么,如何只为 Visual C++ 编译 Cairo 1.6.4(或更高版本)。包括依赖项(png、zlib、pixman)。

最佳答案

以下是使用 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

    目录
    # zlib.lib 是静态库
    #
    # zdll.lib 是 zlib1.dll 的导入库
    # zlib1.dll 是共享库

    压缩包

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

    VC++ 9.0 编译器给出了大量“这可能不安全”的警告。别理他们;
    这是 MS 安全 panic (代码很好)。

    cd lpng1231\lpng1231 # 出于某种原因,这是两层楼深

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

    目录
    # libpng.lib 是静态库
    #
    # dll 没有被创建

    像素人

    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 (使用/d/... 而不是 D:)
    cd pixman-0.12.0/pixman
    make -f Makefile.win32

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

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

    ls 发布
    # pixman-1.lib(开罗需要的静态库)

    留在 VC++ 调味 MSYS 提示中,也可以编译 Cairo。

    开罗

    http://www.cairographics.org/releases/ 下载(并解压)cairo-1.6.4.tar.gz

    光盘
    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'。使用手动准备的
    (在 Cairo > 1.6.4 中可能有一个“src/cairo-features-win32.h”,你可以
    只需重命名):

    cp ../cairo-features.h src/

    重试 make 命令(向上箭头记住它)。

    ls 源代码/发布
    #
    # 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 目录:
    ..\..\..\cairo-1.6.4\src(附加到现有)

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

    链接器/输入/其他依赖项:
    cairo-static.lib libpng.lib zlib.lib msimg32.lib
  • 优化:快速FPU代码

  • C++/代码生成/浮点模型
    快速地

    右键单击“cairomm-1.0”和“build”。有一些警告。

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

    关于visual-studio-2008 - 如何为 Visual C++ 2008 (Express edition) 编译 Cairo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/85622/

    相关文章:

    c++ - PROCESSENTERY32 结构中的 szExeFile 给出了一个奇怪的值

    linux - 无线路由器的管理界面

    c# - 将用户控件拖放到 VS 设计器时发生 TypeLoadException

    asp.net-mvc - 您是否清理了 Visual Studio MVC 项目中未使用的脚本?

    c++ - 为什么 godbolt 生成的 asm 输出与我在 Visual Studio 中的实际 asm 代码不同?

    c# - 开源 ASP.NET 甘特图 Web 控件

    c++ - C\C++开源PCM到Mp3转换器?

    c# - 创建新表单的问题

    c++ - Visual Studio 2008 中的内存和寄存器面板丢失

    c++ - (Visual C++ v141) 按位函数编译不正确