C编译:错误:程序中的“\4”;八进制流?

uyto3xhc  于 2023-10-16  发布在  其他
关注(0)|答案(2)|浏览(105)

我正在尝试编译一个负载的 .c 文件。
(1)文件编译正常,使用cc

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

(2)然后,我需要从最终输出中创建一个静态库,用于C++程序。所以我做了:

ar cru liborientdb-c.a *.o

(3)它工作正常。然而,当我开始编译包含第1行中的库的C++程序 testme.cpp 时,

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

所以,根据其他一些帖子here的建议,我相信错误可能是由于编码混乱。
所以我使用了“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

我该怎么解决这个问题呢?我实际上遵循了建议here,并在我的库源文件上运行了这个:

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

回复是文件保持不变(最后修改日期仍然是旧的)。然后我打开我的.c文件,看到它们是UTF-8格式的,这显然是ASCII的一个子集。所以这似乎不是一个问题。
但是.o文件看起来还是很奇怪。
我该怎么办?

oxf4rvwz

oxf4rvwz1#

请看:

#include "liborientdb-c.a"

.a文件不是C源文件。甚至是文本文件。
通常,.a文件被添加到编译的最后一个链接行。

cc -o something file.o file2.o liborientdb-c.a etc etc
zkure5ic

zkure5ic2#

您在 .cpp 源代码中包含了一个二进制文件:

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

查找名为“liborientdb-c.h”的头文件,并将其包含在内(猜测,您可能希望包含所有适当的**.h* 头文件)。
你的makefile应该链接到上面的 .a 文件。

相关问题