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 对我在这方面的理解有很大帮助。
希望对您有所帮助。
由于对 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 对我在这方面的理解有很大帮助。
希望对您有所帮助。