linux makefile链接错误__line__

时间:2012-05-02 19:17:49

标签: linux unix

我在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__;存在于这些库的某处或者我如何解决此错误?

3 个答案:

答案 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中不存在。

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