【问题标题】:C Compiling: error: stray '\4' in program ; octal flow?C编译:错误:程序中的流浪'\ 4';八进制流?
【发布时间】:2013-10-09 13:16:54
【问题描述】:

尝试编译大量 .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”并尝试追踪“八进制流”在哪里搞砸了。使用“od -c”后我的一个 .o 文件的输出看起来很糟糕,所以我认为这可能是原因。

EG。

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 的建议并运行了我的 lib 源文件

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

响应是文件保持不变(最后修改日期仍然是旧的)。然后我打开我的 .c 文件,发现它们是 UTF-8 格式的,这显然是 ASCII 的一个子集。所以这似乎没有问题。

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

如何进行???

【问题讨论】:

  • 您要包含一个 .a 文件?
  • UTF-8 不是 ASCII 的子集。

标签: c++ c linux gcc cc


【解决方案1】:
#include "liborientdb-c.a"

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

通常,.a 文件被添加到编译的最后链接行。

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

【讨论】:

  • 谢谢,抱歉 - 时间不早了:D
【解决方案2】:

您在 .cpp 源中包含一个二进制文件

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

查找名为“liborientdb-c.h”的头文件,并包含它(猜想,您可能想要包含所有适当的 *.h 头文件)。

并且你的 makefile 应该链接到上面的 .a 文件。

【讨论】:

    猜你喜欢
    • 2018-05-06
    • 2015-06-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多