2017-02-14 2 views
0

Ich versuche, ein Programm unter Windows mit MingW (msys2) zu kompilieren und es schlägt mit der j0-Funktion fehl. Unter Linux kompiliert es kein Problem. Es scheint zu hassen, wenn ich das -std = C++ 11 Flag auf dem Compiler verwende. Wie bekomme ich das richtig kompilieren und mit dem Flag -std = C++ 11?mingw C++ kompiliert j0 funciton

Beispielcode:

#include <cmath> 


int main(int argc, char *argv[]) 
{ 
    float test = j0(5); 
} 

Ausgabe

$ g++ -std=c++11 test.cpp -o test 
test.cpp: In function 'int main(int, char**)': 
test.cpp:6:21: error: 'j0' was not declared in this scope 
    float test = j0(5); 

Antwort

3

Offenbar definiert MinGW die Bessel-Funktionen nur dann, wenn __STRICT_ANSI__ nicht definiert ist, und es wird definiert, wenn -std=c++11 angegeben ist. Ich konnte Ihren Code in MinGW kompilieren, indem Sie #undef __STRICT_ANSI__ am Anfang der Datei hinzufügen. Siehe https://sourceforge.net/p/mingw-w64/feature-requests/68/

Sie könnten stattdessen auch -std=gnu++11 versuchen. Siehe https://stackoverflow.com/a/19667112/10077

+0

Dies ist eine wirklich ausgezeichnete Antwort. Das Hinzufügen von -std = gnu ++ 11 hat das Problem wunderbar gelöst. –