C Компиляция: ошибка: отклонение ‘\ 4’ в программе; восьмеричный поток?

Попытка скомпилировать загрузку файлов .c

(1) Файлы компилируются нормально, используя cc

cc -Wall -Wextra -Wunreachable-code -ggdb -O0 *.c

(2) Затем мне нужно сделать статическую библиотеку из конечного вывода для использования в программе на c ++. Итак, я делаю:

ar cru liborientdb-c.a *.o

(3) Работает нормально. Однако, когда я прихожу, чтобы скомпилировать программу testme.cpp на c ++, которая включает библиотеку в строке # 1

(line 1 of testme.cpp)
#include "liborientdb-c.a"

Шаг компиляции:

cc testme.cpp

я получаю эту ошибку:

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

Итак, следуя советам на некоторых других постах Вот, Я считаю, что ошибки могут быть из-за испорченной кодировки.

Так что я использовал ‘od -c’ и попытался отследить, где «восьмеричный поток» запутался. Вывод для одного из моих .o файлов после ‘od -c’ выглядит довольно плохо, поэтому я думаю, что это может быть причиной.

НАПРИМЕР.

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

Как я могу это исправить, хотя? Я действительно следовал совету Вот и побежал по моим исходным файлам lib

recode UTF8..ISO-8859-15 *.c

Ответ — файлы остаются без изменений (дата последнего изменения все еще старая). Затем я открываю свои файлы .c и вижу, что они находятся в UTF-8, который, очевидно, является подмножеством ASCII. Так что, казалось бы, нет проблем.

Но файлы .o по-прежнему выглядят странно.

Как действовать ???

1

Решение

#include "liborientdb-c.a"

.файлы не являются исходными файлами на языке C. Или даже текстовые файлы по этому вопросу.

Обычно файлы .a добавляются в последнюю строку компиляции.

cc -o что-то file.o file2.o liborientdb-c.a и т. д. и т. д.

9

Другие решения

Вы включаете двоичный файл в ваш источник .cpp

(line 1 of testme.cpp)
#include "liborientdb-c.a"

Найдите файл заголовка с именем «liborientdb-c.h» и включите его (предположим, вы, вероятно, захотите включить все соответствующие файлы заголовков * .h).

И ваш make-файл должен ссылаться на указанный выше файл .a.

3