Kompilacja C: błąd: zbłąkany '4' w programie; przepływ ósemkowy?
Próbuję skompilować ładowanie plików .c
(1) Pliki kompilują się, używająccc
cc -Wall -Wextra -Wunreachable-code -ggdb -O0 *.c
(2) Następnie muszę utworzyć statyczną bibliotekę z ostatecznego wyjścia, aby użyć jej w programie c ++. Ja również:
ar cru liborientdb-c.a *.o
(3) Działa dobrze. Jednak gdy przychodzę skompilować program c ++ testme.cpp, który zawiera bibliotekę w linii # 1
(line 1 of testme.cpp)
#include "liborientdb-c.a"
Krok kompilacji:
cc testme.cpp
mam ten błąd:
liborientdb-c.a:117:22: error: stray '\3' in program
liborientdb-c.a:117:263: warning: null character(s) ignored [enabled by default]
liborientdb-c.a:117:22: error: stray '\17' in program
liborientdb-c.a:117:265: warning: null character(s) ignored [enabled by default]
liborientdb-c.a:117:283: warning: null character(s) ignored [enabled by default]
liborientdb-c.a:117:22: error: stray '\22' in program
liborientdb-c.a:117:287: warning: null character(s) ignored [enabled by default]
liborientdb-c.a:117:22: error: stray '\1' in program
liborientdb-c.a:117:289: warning: null character(s) ignored [enabled by default]
liborientdb-c.a:117:22: error: stray '\362' in program
....
Tak więc, postępując zgodnie z radą na niektórych innych postachtutaj, wierzę, że błędy mogą być spowodowane błędnym kodowaniem.
Użyłem więc „od -c” i spróbowałem prześledzić, gdzie „przepływ ósemkowy” jest zawalony. Dane wyjściowe jednego z moich plików .o z „od -c” wyglądają dość źle, więc myślę, że to może być powód.
NA PRZYKŁAD.
0000000 177 E L F 002 001 001 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000020 001 \0 > \0 001 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000040 \0 \0 \0 \0 \0 \0 \0 \0 ` ( \0 \0 \0 \0 \0 \0
0000060 \0 \0 \0 \0 @ \0 \0 \0 \0 \0 @ \0 026 \0 023 \0
0000100 U H 211 ? H 203 ? 020 H 211 } ? H 211 u ?
0000120 H 213 E ? H 213 \0 H 213 @ \b H 205 ? t 023
0000140 H 213 E ? H 213 \0 H 213 @ \b H 211 ? ? \0
Jak mogę to naprawić? Właściwie zastosowałem się do radytutaj i uruchomiłem moje pliki źródłowe lib
recode UTF8..ISO-8859-15 *.c
Odpowiedź brzmi: pliki pozostają niezmienione (data ostatniej modyfikacji jest nadal stara). Otwieram więc pliki .c i widzę, że są w UTF-8, który jest najwyraźniej podzbiorem ASCII. Więc to nie wydaje się być problemem.
Ale pliki .o nadal wyglądają dziwnie.
Jak kontynuować ???