2013-10-31 31 views
0

我在mupdf上嘗試使用waf(構建系統)進行實驗。mupdf - 在鏈接規範中無效使用'static'

編譯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什麼開關/標誌來解決這個問題?

我使用gcc(rev3,由MinGW-builds項目構建)4.8.1,在Windows 7 64bit上。

聲明:我不明白C++。

回答

3

我可以用下面的複製錯誤:

extern "C" static void f() 
{ 
} 

我可以通過代碼稍微改變來解決該錯誤:

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

好像編譯器應該在這裏一點小聰明,但至少可以解決它。

+0

請注意,這使得零感。 「靜態」應該如何連接外部鏈接? –

+0

@NikosC。如果你理解'extern「C」'關鍵字,那麼它就會有一定的意義 - 導致錯誤是沒有意義的。閱讀評論我已經在您的文章下面瞭解更多信息。 – mah

+0

據我所知,在mupdf中,有C函數調用C++文件中定義的一些函數。 – dilbert