2016-05-17 13 views
1

Da ich kein Verständnis von C++ habe (ich unterrichte mich selbst Swift), habe ich ein wenig Mühe, um dieses Problem zu umgehen - aber ich würde gerne einige der Funktionen in der FreeImage-Bibliothek in meinem Projekt veröffentlichen .freeimage 3.17 Bibliothekserstellung fehlgeschlagen unter Mac OS X: scheitert mit C++ 11 Fehler wird verengt ... irgendwelche Ideen?

Es scheint, dass nur ein Modul Fehler erzeugt: dcraw_common.cpp - und die fehlerhaften Zeilen sind diejenigen aus der folgenden Liste, wo es einen Wert von 0x80 oder höher gibt. Aus den Untersuchungen, die ich gemacht habe, scheint es, dass diese Werte für ein signiertes Zeichen zu groß sind (max. 128?), Die Liste enthält jedoch auch negative Zahlen und kann daher kein unsigniertes Zeichen verwenden.

Jede Hilfe wäre am dankbarsten erhalten.

Hier ist ein Beispiel für die Fehlermeldung durch den Make-Prozess erzeugt:

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, 
         ^~~~ 

Und hier ist der Code:

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

Sie könnten 0x88 als -120 schreiben, und in ähnlicher Weise für alle solche Zahlen, für die Sie Fehler erhalten. – Michael

Antwort

0

C++ 11 verhindert 'narrowing conversions' so. Frühe Versionen von C++ würden sie akzeptieren. Ich denke, dieser Patch an die Quelle von dcraw_common.cpp sollte es beheben.

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

Es gibt eine doppelte Frage hier. Building FreeImage 3.16.0 for Android

+0

Vielen Dank dafür. Ich habe den Patch angewendet, bekomme aber immer noch eine falsche Zeile. In der Klasse adobe_coeff: - kurz schwarz, maximal, trans [12]; + ushort schwarz, maximal; + kurze trans [12]; Aber in 3.17 Quelle, die zu ersetzende Zeile lautet: int t_black, t_maximum, trans [12]; Ich ersetzte dies durch die 2 Ersatzlinien, aber der folgende Fehler erscheint: Fehler: doppeltes Mitglied 'imgdata' ushort schwarz, Maximum; (zeigt das Maximum als Fehlerquelle an). Ich habe auch versucht, zu machen, ohne diese Zeile zu ersetzen, aber der C++ 11 Verschmälerungsfehler erschien. Irgendwelche Ideen, bitte? – pastewort

0

Die nützlichste Lösung, die ich zu diesem Problem fand, war die folgende GitHub-Veröffentlichung: https://github.com/danoli3/FreeImage. Hier scheint eine nette Seele die 3.17.0-Bibliothek erfolgreich aufgebaut und hochgeladen zu haben. Ich habe festgestellt, dass das gut funktioniert.

Bitte beachten Sie jedoch, dass es mit einem hartcodierten Pfad von /opt/local/lib erstellt wurde - was ein Problem sein kann, wenn Sie zur Implementierung kommen, da Ihre App dort suchen wird, nicht mit der App gebündelt. Ich fand diese LiveCode Post half mein Verständnis in dieser Hinsicht eine Menge.

Hoffe, das hilft.