Undefiniertes Symbol "toupper" in MacPorts GCC 4.7 OS-X Mavericks 10.9 C11

8

EDIT2:

Also hier ist ein Beispiel für das Programm:

%Vor%

1) klingeln:

clang++ -std=c++0x -stdlib=libc++ -lc++ main.cc -o main

kompiliert gut.

2) g++-mp-4.8 -std=c++11 main.cc -o main gibt:

%Vor%

3) g++-mp-4.8 main.cc -o main kompiliert!

irgendwelche Ideen, was ist falsch mit dem Setup?

==========

Kann jemand helfen zu verstehen, was sich in Gcc / macports / os 10.9 geändert hat?

Ich hatte ein Kompilierungsskript einer Drittanbieter-Bibliothek, die in OS 10.8 arbeitet. Vor kurzem habe ich auf den neuen OSX (10.9) aktualisiert und gcc 4.7 von Macports gestoppt Verknüpfung. Insbesondere habe ich:

%Vor%

Dieses Problem ist dem hier sehr ähnlich %Code%. Es scheint jedoch, dass istype nicht in libgcc ++ .dylib sitzt.

Irgendwelche Ideen was zu versuchen?

EDIT1:

in der Tat, 4,8 behoben das Problem mit isspace , aber eine andere Oberfläche - isspace :

%Vor%

Was ist hier los? Hat es mit dem neuen Xcode (5.0) zu tun?

    
Denis 27.10.2013, 18:34
quelle

3 Antworten

10

Es gibt einen Patch in Ссылка Es hat mein Problem gelöst. Sie müssen nur die Datei in /usr/include/sys/cdefs.h patchen und ersetzen

%Vor%

von

%Vor%

Viel Glück.

    
aaragon 31.10.2013, 12:49
quelle
4

Die meisten ctype.h -Elemente sind als Inline-Definitionen deklariert, sodass sie zum Zeitpunkt der Kompilierung erweitert werden. Wenn Sie ohne -std=c++11 kompilieren, wird es erweitert zu:

%Vor%

Wenn Sie mit -std=c++11 kompilieren, wird es zu:

erweitert %Vor%

Aus irgendeinem Grund ignoriert g ++ dann die perfekte Definition, die dort präsentiert wird.

Basierend auf dem Kommentar zu diesem ungültigen Fehler , wählt gcc, den Code nicht zu optimieren und nach der Definition in einer der verbundenen Bibliotheken suchen.

Ein Workaround scheint zu sein, mit mindestens -O1 -Optimierung zu kompilieren, was das Problem vermeidet, aber es ist ein echter Schmerz in den Arsch.

Wenn wir nun die Unterschiede in den # Definitionen zwischen Nicht-C ++ 11 und C ++ 11 betrachten, sehen wir, dass wir ein extra #define haben:

%Vor%

und wegen eines Stücks Code im 10.9 SDK ( usr/include/sys/cdefs.h ) werden all diese __DARWIN_CTYPE_TOP_inline in cytpe.h in __header_inline umgewandelt, die dank dieses kleinen zusätzlichen Codes in extern __inline __attribute__((__gnu_inline__)) umgewandelt werden :

%Vor%

Es sieht so aus, als ob Apples Header versucht, das Richtige zu tun, aber sie haben nicht alle ihre Basen abgedeckt. Es gibt ein anderes Problem , das einen ähnlichen Fehler erwähnt.

    
Petesh 30.10.2013 18:35
quelle
0

Ich lese seit einigen Tagen Linke-Fehler mit dem Außenseiter. Das Problem scheint mit bestimmten Tools zu bestehen, die früher kompatibel waren, aber länger sind.

Haben Sie versucht, alle Tools zu zwingen, einen Typ clang ++ oder llvm-g ++ zu verwenden?

    
Mark Essel 30.10.2013 16:44
quelle

Tags und Links