linux makefile链接错误\uuuu行__

linux makefile链接错误\uuuu行__,linux,unix,Linux,Unix,我在Linux中遇到以下错误:“对\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu extern int __line__; LDF(__line__ = __LINE__); 因此,\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

我在Linux中遇到以下错误:“对
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

extern int __line__;
LDF(__line__ = __LINE__);
因此,
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
在这里是一个非宏变量,它的值为
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>赋值。在这里它但是在链接.o文件时


UNIX中不会出现此错误。此外,在链接libgen时,会链接libposix4库。这些库仅在UNIX中存在,而不是在LINUX中。我假设
int\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu按照标准进行测试

它在UNIX上“工作”的事实是由实现定义的,并且您正在目睹它不可移植的事实

我唯一的建议是重命名该变量。你可以玩火,在编译标志中添加一些真正有害的东西:

-D__line__=MYCODEBASE_LINE__

但我并不特别推荐这样的东西,它可能是一个非标准的、未记录的内部变量,恰好在使用的一些库中

一些聪明的家伙在你的程序中发现了它的一些用途。你应该试着理解为什么会有它,以及它是否真的需要,因为它很可能在Linux中根本不存在


这就是为什么它以双下划线开头:因为该名称是保留的。

@rodrigo@sehe。感谢您的输入。我在一个“.c”文件中找到了int=0;,该文件的对象被创建,还有一些其他对象文件archive file“.a“已创建库文件。也就是说,common.c具有int=0;和common.o以及一些x.o、y.o被归档以使用命令“ar ruv”创建“libcommon.a”,该库被链接以在makefile中创建二进制可执行文件-lcommon。再次感谢您的投入

你的意思是什么?(oops cms打字)
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu是一个自动控制宏,对于C编译器来说,它仍然是一个常量(但每一行都有不同的替换)@OP:backticks很神奇。修订历史将向您展示我是如何格式化您的帖子的。点击时间戳,它在我的万有引力上面写着“编辑…”。谢谢。。我试图编辑,但无法编辑。LDF只是一个函数。不用担心。。我的问题是在文件“extern int line”中,所以“int line”应该在某个地方。那么它是如何在UNIX中工作的,而不是在LINUX中。链接过程中唯一的区别是,libgen、libposix库是链接的,这些库在UNIX中存在,但在LinuxNot start标识符中不可用,并且带有双下划线。它们是为实现而保留的。(根据月亮的相位,链接器有时会删除下划线。)谢谢你的回答!!!我明白了为什么代码中有它。它只是打印行号,这可以通过C宏行本身实现。但如果我将选项-D_uuu-line_uuu=uuu-line_uuu传递给编译器,则表示我正在定义一个宏。但在代码中它被声明为整数变量。因此,对于作为LDF(line=line)传递的函数,我最好从代码中重命名或删除它。相反,我将使用LDF(行)。@rodrigo:如果
\uuuuu LINE\uuuu
是一个在与日志相关的转换单元中定义的全局变量(?)@smileybhuff-我的观点是正确的,如果您不需要
\uuu LINE\uuuu
,并且它不存在,请删除它!谢谢你的回答!!!我明白了为什么代码中有它。它只是打印行号,这可以通过C宏行本身实现。但如果我将选项-D_uuu-line_uuu=uuu-line_uuu传递给编译器,则表示我正在定义一个宏。但在代码中它被声明为整数变量。因此,对于作为LDF(line=line)传递的函数,我最好从代码中重命名或删除它。相反,我将使用LDF(行)。@smileybhuff链接器不存在宏。宏使编译器实际上看到不同的单词。只要您在其他翻译单元中对
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
的定义使用相同的“#define”进行预处理,它就应该可以工作。(当然,我假设,
\uuuuuuuuuuuuuuuuuuu
是在您的程序中定义的)