Problem mit GSOAP,GNU GCC Compiler und g++ follow the C++11 ISO C++ language
-
Hallo zusammen,
ich habe mir mit GSOAP die entsprechenden Stubs etc via dem executable soapcpp2 -i -C "headerfile.h", für den Client erstellen lassen.
Als Entwicklungsumgebung nutze ich CodeBlocks und als Compiler den GCC-Compiler version 4.8.1.
In meinem Projekt-ordner liegen die files:
-stdsoap2.h
-soapStub.h
-soapHelloUserProxy.h
-soapH.h
sowie die cpp files
-soapHelloProxy.cpp
-stdsoap2.cpp
-soapC.cpp
-main.cppDie cpps habe ich alle zu meinem Projekt hinzugefügt!
Zudem musste ich noch die libws2_32.a aus meinem MinGW ordner bei den Linker-settings hinzufügen.
Wenn ich das ganze dann kompiliere funktioniert auch alles Problemlos.
Das Problem entsteht erst sobald ich bei den Compiler-settings die option ...Have g++ follow the C++11 ISO C++ language standard [-std=c++11]... setze.
Und zwar bekomme ich dann folgende Fehler:
||=== Build: Debug in TEST (compiler: GNU GCC Compiler) ===|
C:\Users\baumanch\Coding\TEST\stdsoap2.cpp|75|warning: ignoring #pragma comment [-Wunknown-pragmas]|
C:\Users\baumanch\Coding\TEST\stdsoap2.cpp|77|warning: ignoring #pragma warning [-Wunknown-pragmas]|
C:\Users\baumanch\Coding\TEST\stdsoap2.cpp||In function 'const char* soap_float2s(soap*, float)':|
C:\Users\baumanch\Coding\TEST\stdsoap2.h|1187|error: '_isnan' was not declared in this scope|
C:\Users\baumanch\Coding\TEST\stdsoap2.cpp|12787|note: in expansion of macro 'soap_isnan'|
C:\Users\baumanch\Coding\TEST\stdsoap2.h|1191|error: '_finite' was not declared in this scope|
C:\Users\baumanch\Coding\TEST\stdsoap2.h|1295|note: in expansion of macro 'soap_isinf'|
C:\Users\baumanch\Coding\TEST\stdsoap2.cpp|12789|note: in expansion of macro 'soap_ispinff'|
C:\Users\baumanch\Coding\TEST\stdsoap2.h|1191|error: '_finite' was not declared in this scope|
C:\Users\baumanch\Coding\TEST\stdsoap2.h|1297|note: in expansion of macro 'soap_isinf'|
C:\Users\baumanch\Coding\TEST\stdsoap2.cpp|12791|note: in expansion of macro 'soap_isninff'|
C:\Users\baumanch\Coding\TEST\stdsoap2.cpp||In function 'const char* soap_double2s(soap*, double)':|
C:\Users\baumanch\Coding\TEST\stdsoap2.h|1187|error: '_isnan' was not declared in this scope|
C:\Users\baumanch\Coding\TEST\stdsoap2.cpp|12944|note: in expansion of macro 'soap_isnan'|
C:\Users\baumanch\Coding\TEST\stdsoap2.h|1191|error: '_finite' was not declared in this scope|
C:\Users\baumanch\Coding\TEST\stdsoap2.h|1294|note: in expansion of macro 'soap_isinf'|
C:\Users\baumanch\Coding\TEST\stdsoap2.cpp|12946|note: in expansion of macro 'soap_ispinfd'|
C:\Users\baumanch\Coding\TEST\stdsoap2.h|1191|error: '_finite' was not declared in this scope|
C:\Users\baumanch\Coding\TEST\stdsoap2.h|1296|note: in expansion of macro 'soap_isinf'|
C:\Users\baumanch\Coding\TEST\stdsoap2.cpp|12948|note: in expansion of macro 'soap_isninfd'|
||=== Build failed: 6 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|Kann mir jemand helfen? Ich habe keine Idee wie ich das Problem lösen kann
Warum habe ich die Option gesetzt?
Ich wollte regex aus der boost-lib nutzen und dafür muss ich die Option setzen.Vielen Danke schonmal für eure Hilfe.
LG
Sudo
-
Anscheinend nutzt gSOAP Features, die in C++11 deprecated sind oder GNU-Erweiterungen, die mit -std=c++11 abgeschaltet werden.
Du könntest es mit -std=gnu++11 probieren, dann bleiben die GNU-Erweiterungen an. Wenn das nicht hilft und Du nicht am gSOAP-Quellcode rumschrauben möchtest, könnest Du allenfalls alle gSOAP-Files ohne C++11 und den Rest Deines Quelltextes mit C++11 übersetzen lassen.
-
LordJaxom schrieb:
Anscheinend nutzt gSOAP Features, die in C++11 deprecated sind oder GNU-Erweiterungen, die mit -std=c++11 abgeschaltet werden.
Du könntest es mit -std=gnu++11 probieren, dann bleiben die GNU-Erweiterungen an. Wenn das nicht hilft und Du nicht am gSOAP-Quellcode rumschrauben möchtest, könnest Du allenfalls alle gSOAP-Files ohne C++11 und den Rest Deines Quelltextes mit C++11 übersetzen lassen.
Erstmal vielen Dank für deine Hilfe. Ich habe es mit -std=c++11 versucht, aber dann habe ich bezüglich der boost/regex lib wieder einen Haufen an Fehler bekommen. Hilft also leider nicht
Bezüglich deines zweiten Vorschlag habe ich noch eine Frage:Kannst du oder jemand mir sagen, wie ich in CodeBlocks ein Compiler-Flag für ein bestimmtes C-File setze? Irgendwie bekomm ich es nur für alle Files hin die in einem Projekt eingebunden sind.
Vielen vielen Dank für deine Hifle :DDDD
Einen schönen Abend noch
-
Problem gelöst
Es ist nicht notwendig das man das c++11 compiler flag für die boots-lib setzen muss. Die Fehler sind entstanden, weil ich eine boost-Lib falsch eingebunden hatte.
Jetzt kann ich gsoap und boost/regex ohne das c++11 flag compilieren und linken.
Fazit:
Die gsoap files
=> -stdsoap2.h/cpp lassen sich nicht mit dem flag c++11 kompilieren
=> Um boost/regex zu verwenden muss aber nicht das -std=c++11 flag gesetzt werden.
Das war eine Fehlinformation von mir.Vielen Dank für die Hilfe.