2016-05-17 16 views
1

С отсутствием понимания C++ (я преподаю Swift), я немного борюсь за это, но в идеале хотел бы предоставить некоторые функции в библиотеке FreeImage в моем проекте ,freeimage 3.17 сборка библиотеки сбоя в Mac OS X: сбой с C++ 11 сужение ошибки ... любые идеи?

Похоже, что только один модуль генерирует любые ошибки: dcraw_common.cpp - и строки, находящиеся в ошибке, являются данными из следующего списка записей, где есть значение 0x80 или выше. Из проведенных мной исследований оказалось, что эти значения слишком велики для подписанного символа (max 128?), Но список также содержит отрицательные числа, и поэтому он не может использовать символ unsigned.

Любая помощь будет оказана с благодарностью.

Вот пример сообщения об ошибке, генерируемого в процессе макияжа:

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 }; 
    ... 
+0

Вы можете переписать 0x88 как -120 и аналогично для всех таких чисел, за которые вы получаете ошибки. – Michael

ответ

0

C++ 11 предотвращает 'narrowing conversions' подобное. Ранние версии C++ приняли бы их. Я думаю, что этот патч для источника dcraw_common.cpp должен исправить его.

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

Там является дубликатом вопрос здесь. Building FreeImage 3.16.0 for Android

+0

Большое спасибо за это. Я применил патч, но я по-прежнему получаю одну строку в ошибке. В классе adobe_coeff: - короткий черный, максимальный, транс [12]; + ushort черный, максимум; + короткий транс [12]; Но в источнике 3.17 строка, подлежащая замене, читается: int t_black, t_maximum, trans [12]; Я заменил это на 2 линии замены, но появляется следующая ошибка: ошибка: дублирующий элемент 'imgdata' ushort black, maximum; (указывающий максимум как источник ошибки). Я также пробовал make без замены этой строки, но возникла ошибка сужения C++ 11. Любые идеи, пожалуйста? – pastewort

0

Наиболее удобным решением, которое я нашел в этой проблеме, была следующая публикация GitHub: https://github.com/danoli3/FreeImage. Здесь какая-то душа, похоже, успешно построила библиотеку 3.17.0 и загрузила ее. Я обнаружил, что все работает отлично.

Пожалуйста, имейте в виду, что он был построен с жестко закодированным путем /opt/local/lib - это может быть проблемой, когда вы приходите на реализацию, так как ваше приложение будет искать его там, а не в комплекте с приложением. Я обнаружил, что это сообщение LiveCode помогло мне понять в этом отношении много.

Надеюсь, это поможет.