freeimage 3.17库构建在Mac OS X上失败:失败,C ++ 11缩小错误......任何想法?

时间:2016-05-17 12:29:59

标签: c++11 osx-yosemite freeimage

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

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

非常感谢任何帮助。

以下是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 };
    ...

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我在此问题中找到的最有用的解决方案是以下GitHub发布:https://github.com/danoli3/FreeImage。在这里,一些善良的灵魂似乎已经成功构建了3.17.0库并上传了它。我发现效果很好。

请注意,它是使用/opt/local/lib的硬编码路径构建的 - 这可能是您实施时的问题,因为您的应用将在那里寻找它,而不是与应用程序。我确实发现这篇LiveCode帖子帮助了我在这方面的理解很多。

希望这有帮助。