我在Linux中遇到以下错误“__line__
的未定义引用。我知道C具有隐式宏__LINE__
。在代码__line__
中分配了__LINE__
as
extern int __line__;
LDF(__line__ = __LINE__);
所以__line__
是一个非宏的变量,它的值为__LINE__
。这里是extern int
,所以它应该被声明为int __line__
。但是没有看到_ line _is声明的任何标题或c文件。此错误在编译.c文件期间,但在链接.o文件时没有得到。
UNIX中没有此错误。此外,在链接libgen时,libposix4库是链接的。这些库仅存在于UNIX而不是LINUX中我假设int __line__;
存在于这些库的某处或者我如何解决此错误?
答案 0 :(得分:1)
@rodrigo @sehe。谢谢你的投入。我找到了行行 = 0;在“.c”文件之一中创建该文件的对象,并与更多目标文件一起创建文件“.a”库文件。也就是说,common.c有int line = 0;和common.o和一些x.o,y.o被创建使用命令“ar ruv”创建“libcommon.a”,并且该库链接在makefile中创建二进制可执行文件-lcommon。再次感谢您的投入!!!!
答案 1 :(得分:0)
__line__
被标准禁止作为便携式标识符。
它在UNIX上“有效”的事实是实现定义的,并且您正在目睹不可移植的事实。
我唯一的建议是重命名该变量。你可以玩火,并在编译标志中加入一些非常邪恶的东西:
-D__line__=MYCODEBASE_LINE__
但我不特别推荐这样的事情
答案 2 :(得分:0)
它可能是一个非标准的,未记录的内部变量,碰巧出现在一些使用过的库中。
一些聪明的家伙在你的程序中找到了一些用处。您应该尝试理解为什么存在以及是否真的需要它,因为它很可能在Linux中不存在。
这就是它以双下划线开头的原因:因为该名称是保留。