Попытка скомпилировать загрузку файлов .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 по-прежнему выглядят странно.
Как действовать ???
#include "liborientdb-c.a"
.файлы не являются исходными файлами на языке C. Или даже текстовые файлы по этому вопросу.
Обычно файлы .a добавляются в последнюю строку компиляции.
cc -o что-то file.o file2.o liborientdb-c.a и т. д. и т. д.
Вы включаете двоичный файл в ваш источник .cpp
(line 1 of testme.cpp)
#include "liborientdb-c.a"
Найдите файл заголовка с именем «liborientdb-c.h» и включите его (предположим, вы, вероятно, захотите включить все соответствующие файлы заголовков * .h).
И ваш make-файл должен ссылаться на указанный выше файл .a.