c++ - mupdf - 在链接规范中无效使用 'static'

标签 c++ gcc waf mupdf

我正在尝试使用 waf 进行实验(构建系统)在 mupdf .

我在编译时遇到编译器错误 mupdf\fitz\dev_gdiplus.cpp .

..\..\..\mupdf\fitz\dev_gdiplus.cpp:1170:12: error: invalid use of 'static' in linkage specification

 extern "C" static void

有问题的代码(这是一个例子;还有很多):

extern "C" static void
fz_gdiplus_fill_path(fz_device *dev, fz_path *path, int evenodd, const fz_matrix *ctm,
    fz_colorspace *colorspace, float *color, float alpha)
{
    GraphicsPath *gpath = gdiplus_get_path(path, ctm, false, evenodd);
    Brush *brush = gdiplus_get_brush(dev, colorspace, color, alpha);

    ((userData *)dev->user)->started = true;
    ((userData *)dev->user)->graphics->FillPath(brush, gpath);

    delete brush;
    delete gpath;
}

这是编译器调用:

['C:\\MinGW64\\mingw64\\bin\\g++.exe', '-fpermissive', '-IC:\\Users\\Administrator\\Downloads\\SumatraPDF-2.3.2-source\\sumatrapdf-2.3.2\\build\\temp\\debug\\mupdf\\fitz', '-IC:\\Users\\Administrator\\Downloads\\SumatraPDF-2.3.2-source\\sumatrapdf-2.3.2\\mupdf\\fitz', '-IC:\\Users\\Administrator\\Downloads\\SumatraPDF-2.3.2-source\\sumatrapdf-2.3.2\\build\\temp\\debug\\mupdf', '-IC:\\Users\\Administrator\\Downloads\\SumatraPDF-2.3.2-source\\sumatrapdf-2.3.2\\mupdf', '-IC:\\Users\\Administrator\\Downloads\\SumatraPDF-2.3.2-source\\sumatrapdf-2.3.2\\build\\temp\\debug\\mupdf\\pdf', '-IC:\\Users\\Administrator\\Downloads\\SumatraPDF-2.3.2-source\\sumatrapdf-2.3.2\\mupdf\\pdf', '-IC:\\Users\\Administrator\\Downloads\\SumatraPDF-2.3.2-source\\sumatrapdf-2.3.2\\build\\temp\\debug\\mupdf\\xps', '-IC:\\Users\\Administrator\\Downloads\\SumatraPDF-2.3.2-source\\sumatrapdf-2.3.2\\mupdf\\xps', '-IC:\\Users\\Administrator\\Downloads\\SumatraPDF-2.3.2-source\\sumatrapdf-2.3.2\\build\\temp\\debug\\ext\\freetype2\\include', '-IC:\\Users\\Administrator\\Downloads\\SumatraPDF-2.3.2-source\\sumatrapdf-2.3.2\\ext\\freetype2\\include', '-IC:\\Users\\Administrator\\Downloads\\SumatraPDF-2.3.2-source\\sumatrapdf-2.3.2\\build\\temp\\debug\\ext\\jbig2dec', '-IC:\\Users\\Administrator\\Downloads\\SumatraPDF-2.3.2-source\\sumatrapdf-2.3.2\\ext\\jbig2dec', '-IC:\\Users\\Administrator\\Downloads\\SumatraPDF-2.3.2-source\\sumatrapdf-2.3.2\\build\\temp\\debug\\ext\\libjpeg-turbo', '-IC:\\Users\\Administrator\\Downloads\\SumatraPDF-2.3.2-source\\sumatrapdf-2.3.2\\ext\\libjpeg-turbo', '-IC:\\Users\\Administrator\\Downloads\\SumatraPDF-2.3.2-source\\sumatrapdf-2.3.2\\build\\temp\\debug\\ext\\openjpeg', '-IC:\\Users\\Administrator\\Downloads\\SumatraPDF-2.3.2-source\\sumatrapdf-2.3.2\\ext\\openjpeg', '-DWAF=1', '-DVERSION="0.1"', '-DINLINE_MACRO=1', '-DHAVE_STDINT_H=1', '-DHAVE_STRING_H=1', '-DHAVE_STDIO_H=1', '-DDEBUG=1', '..\\..\\..\\mupdf\\fitz\\dev_gdiplus.cpp', '-c', '-o', 'mupdf\\fitz\\dev_gdiplus.cpp.1.o']

我怀疑这与 gcc 有关,而不是代码。 代码有什么问题?需要向 gcc 提供哪些开关/标志才能解决问题?

我在 Windows 7 64 位上使用 gcc(rev3,由 MinGW-builds 项目构建)4.8.1。

免责声明:我不懂 C++。

最佳答案

我可以用以下方法复制错误:

extern "C" static void f()
{
}

我可以通过稍微更改代码来解决错误:

extern "C"
{
    static void f()
    {
    }
}

似乎编译器在这里应该更聪明一些,但至少它可以变通。

关于c++ - mupdf - 在链接规范中无效使用 'static',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19704659/

相关文章:

c++ - 抛出 C++ 异常时在调试器中中断程序

c - 海湾合作委员会 fprintf : should that be an int (32bit) or char (8bit)?

c++ - 具有 C++ 数据结构的 C 代码

build - 如何声明测试脚本对构建程序的WAF依赖?

c++ - 使用 waf 构建系统将程序与 Boost.Asio 链接

c++ - 使用迭代器从 'find' 或 'remove' 删除

用于初始化数组的 C++ 语法

c++ - 表达式必须有类类型

c - 我如何了解我的库是什么标准以及 gcc 在我的计算机中编译的标准是什么?

waf - 自定义waf任务既不运行也不找源