C编译:错误:在程序中迷路'\ 4'; 八分流?

Imm*_*009 1 c c++ linux gcc cc

试图编译一堆.c文件

(1)文件编译正常,使用 cc

cc -Wall -Wextra -Wunreachable-code -ggdb -O0 *.c 
Run Code Online (Sandbox Code Playgroud)

(2)然后,我需要从最终输出创建一个静态库,以便在c ++程序中使用.所以我这样做:

ar cru liborientdb-c.a *.o
Run Code Online (Sandbox Code Playgroud)

(3)工作正常.但是,当我来编译包含第1行库的c ++程序testme.cpp时

(line 1 of testme.cpp)
#include "liborientdb-c.a"
Run Code Online (Sandbox Code Playgroud)

编译步骤:

cc testme.cpp
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

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
....
Run Code Online (Sandbox Code Playgroud)

因此,根据这里的其他一些帖子的建议,我相信错误可能是由于混乱的编码.

所以我使用'od -c'并尝试追踪"八进制流"被搞砸的地方.使用'od -c'之后,我的.o文件之一的输出看起来很糟糕,所以我认为这可能就是原因.

例如.

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
Run Code Online (Sandbox Code Playgroud)

我怎么能解决这个问题呢?我实际上遵循了这里的建议并运行了我的lib源文件

recode UTF8..ISO-8859-15 *.c
Run Code Online (Sandbox Code Playgroud)

响应是文件保持不变(上次修改日期仍然是旧的).那么我打开我的.c文件,看看它们是UTF-8,显然是ASCII的一个子集.所以这似乎没有问题.

但.o文件看起来仍然很奇怪.

如何进行 ???

Cha*_*rns 9

#include "liborientdb-c.a"
Run Code Online (Sandbox Code Playgroud)

.a文件不是C源文件.甚至是文本文件.

通常,.a文件会添加到编译的最后一个链接行.

cc -o something file.o file2.o liborientdb-ca等等