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.cpp

    Die 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.


Anmelden zum Antworten