用gcc 5.2.0去编译mg-samples-3.0.12,报错:
.../lib/libminigui_ths.so: undefined reference to `WndClientRect'
.../lib/libminigui_ths.so: undefined reference to `pixel2rgb'
.../lib/libminigui_ths.so: undefined reference to `WndRect'
解决方法:
$cd libminigui-3.0.12-linux
$grep -r "WndClientRect" .
发现WndClientRect在libminigui-3.0.12-linux/src/newgdi/gdi.c中,将inline void WndRect(HWND hWnd, PRECT prc)和inline void WndClientRect(HWND hWnd, PRECT prc)前面的inline去掉。
$grep -r "pixel2rgb" .
发现pixel2rgb在libminigui-3.0.12-linux/src/mybmp/winbmp.c中,将inline void pixel2rgb (gal_pixel pixel, GAL_Color* color, int depth)前面的inline去掉。
$make clean;make;make install
重新生成库文件。
再去编例子程序就OK了。
原因:
因编译器版本差异,c99对inline的处理与c89的extern inline一致,没有外部可见的函数生成,但是外部可见的函数必须存在,因为有可能会用到它。