freeimage 3.17 库构建在 Mac OS X 上失败:因 C++11 缩小错误而失败...有什么想法吗?

freeimage 3.17 library build failing on Mac OS X: fails with C++11 narrowing error... any ideas?

由于对 C++ 没有任何了解(我正在自学 Swift),我正在努力解决这个问题 - 但理想情况下我希望能够公开一些功能在我项目的 FreeImage 库中。

似乎只有一个模块产生了任何错误:dcraw_common.cpp - 错误行来自以下条目列表,其中的值为 0x80 或更高。从我所做的调查来看,这些值似乎对于带符号的字符来说太大了(最大 128?),但该列表还包含负数,因此它不能使用无符号字符。

如有任何帮助,我们将不胜感激。

下面是 make 过程生成的错误消息示例:

    Source/LibRawLite/./internal/dcraw_common.cpp:4543:19: error: constant expression evaluates to 136 which cannot be narrowed to type 'signed char'
    [-Wc++11-narrowing]
        +1,-1,+1,+1,0,0x88, +1,+0,+1,+2,0,0x08, +1,+0,+2,-1,0,0x40,
                      ^~~~

这是代码:

    void CLASS vng_interpolate()
    {
      static const signed char *cp, terms[] = {
        -2,-2,+0,-1,0,0x01, -2,-2,+0,+0,1,0x01, -2,-1,-1,+0,0,0x01,
        -2,-1,+0,-1,0,0x02, -2,-1,+0,+0,0,0x03, -2,-1,+0,+1,1,0x01,
        -2,+0,+0,-1,0,0x06, -2,+0,+0,+0,1,0x02, -2,+0,+0,+1,0,0x03,
        -2,+1,-1,+0,0,0x04, -2,+1,+0,-1,1,0x04, -2,+1,+0,+0,0,0x06,
        -2,+1,+0,+1,0,0x02, -2,+2,+0,+0,1,0x04, -2,+2,+0,+1,0,0x04,
        -1,-2,-1,+0,0,0x80, -1,-2,+0,-1,0,0x01, -1,-2,+1,-1,0,0x01,
        -1,-2,+1,+0,1,0x01, -1,-1,-1,+1,0,0x88, -1,-1,+1,-2,0,0x40,
        -1,-1,+1,-1,0,0x22, -1,-1,+1,+0,0,0x33, -1,-1,+1,+1,1,0x11,
        -1,+0,-1,+2,0,0x08, -1,+0,+0,-1,0,0x44, -1,+0,+0,+1,0,0x11,
        -1,+0,+1,-2,1,0x40, -1,+0,+1,-1,0,0x66, -1,+0,+1,+0,1,0x22,
        -1,+0,+1,+1,0,0x33, -1,+0,+1,+2,1,0x10, -1,+1,+1,-1,1,0x44,
        -1,+1,+1,+0,0,0x66, -1,+1,+1,+1,0,0x22, -1,+1,+1,+2,0,0x10,
        -1,+2,+0,+1,0,0x04, -1,+2,+1,+0,1,0x04, -1,+2,+1,+1,0,0x04,
        +0,-2,+0,+0,1,0x80, +0,-1,+0,+1,1,0x88, +0,-1,+1,-2,0,0x40,
        +0,-1,+1,+0,0,0x11, +0,-1,+2,-2,0,0x40, +0,-1,+2,-1,0,0x20,
        +0,-1,+2,+0,0,0x30, +0,-1,+2,+1,1,0x10, +0,+0,+0,+2,1,0x08,
        +0,+0,+2,-2,1,0x40, +0,+0,+2,-1,0,0x60, +0,+0,+2,+0,1,0x20,
        +0,+0,+2,+1,0,0x30, +0,+0,+2,+2,1,0x10, +0,+1,+1,+0,0,0x44,
        +0,+1,+1,+2,0,0x10, +0,+1,+2,-1,1,0x40, +0,+1,+2,+0,0,0x60,
        +0,+1,+2,+1,0,0x20, +0,+1,+2,+2,0,0x10, +1,-2,+1,+0,0,0x80,
        +1,-1,+1,+1,0,0x88, +1,+0,+1,+2,0,0x08, +1,+0,+2,-1,0,0x40,
        +1,+0,+2,+1,0,0x10
      }, chood[] = { -1,-1, -1,0, -1,+1, 0,+1, +1,+1, +1,0, +1,-1, 0,-1 };
    ...

C++11 会阻止 'narrowing conversions' 那样。 C++ 的早期版本会接受它们。我认为 dcraw_common.cpp 源代码的这个补丁应该可以修复它。

https://gist.github.com/conchurnavid/ac19c8e882f1835f0310

这里有一个重复的问题。 Building FreeImage 3.16.0 for Android

对于这个问题,我发现最有用的解决方案如下 GitHub posting:https://github.com/danoli3/FreeImage。这里似乎有好心人成功构建了 3.17.0 库并上传了它。我发现效果很好。

但是请记住,它是使用 /opt/local/lib 的硬编码路径构建的 - 这在您实施时可能是个问题,因为您的应用程序将在那里寻找它,而不是捆绑与应用程序。我确实发现这个 LiveCode post 对我在这方面的理解有很大帮助。

希望对您有所帮助。