问题描述
我正在尝试为ARM Linux编译AODV。我使用SabreLite作为内核版本为3.0.35_4.1.0的电路板。值得一提的是,我正在使用OpenEmbedded为我的主板创建我的Linux发行版。AODV源代码(http://sourceforge.net/projects/aodvuu/)有一个自述文件,其中提供了一些关于如何在ARM上安装它的说明,如这里所述。(http://w3.antd.nist.gov/wctg/aodv_kernel/kaodv_arm.html)。
我能够升级Makefile,以便与2.6内核后版本一起使用(如上所述,我有3.0.35_4.1.0内核版本)。因此,基本上,我要做的是创建一个模块(假设为file.ko),然后将其加载到ARM中(使用inmod file.ko命令)。
为此,我使用了一个交叉编译器,它的一些值如下所示:
回显$CC:ARM-OE-LINUX-GNOUEABI-GCC-MARCH=ARMv7-a-mhumb-interwork-mFloat-abi=Hard-mfpu=neon-mtune=CORICAL-A9--sysroot=/usr/local/oecore-x86_64/sysroots/cortexa9hf-vfp-neon-oe-linux-gnueabi
ECHO$ARCH=ARM
ECHO$CFLAGS:O2-PIPE-g-FELIMATE-UNUSED-DEBUG-TYES
回显$LD:ARM-OE-linux-gnueabi-eld--sysroot=/usr/local/oecore-x86_64/sysroots/cortexa9hf-vfp-neon-oe-linux-gnueabi
回应$LDFLAGS:-WL,-O1-WL,--HASH-STYLE=GNU-WL,--按需-WL,--按需
当我启动"make命令"时,我收到以下错误:
LD[M]/home/scof/script_emulation/AODV/aodv-uu/lnx/kaodv.oarm-oe-linux-gnueabi-ld:无法识别的选项‘-wl,-O1’
arm-oe-linux-gnueabi-ld:使用--Help选项查看用法信息
它说明链接器有问题。这个链接器来自交叉编译工具,我通常不应该碰它。
总之,要修复上面的错误,我尝试按如下方式撤销LDFLAGS:导出LDFLAGS=‘’,在此之后,make命令起作用,我得到了模块kaodv.ko。但当我把它插入我的手臂检查时,它不起作用。它实际上冻结了我终端所以我的问题是,我必须在编译时指定LDFLAGS吗?撤回LDFLAGS会对生成的内核模块产生影响吗?事实上,我试图理解哪里可能有问题,我唯一想到的是,我可能不应该手动更改LDFLAGS。但是,如果我不更改de LDFLAGS,我会收到UnRecognded Option错误。与此相关的第二个问题是,LDFLAGS的可能价值是什么在ARM编译中谢谢!!
推荐答案
在基于GCC的工具链中有两种常见的调用链接器的方法。一种是直接做,另一种是用GCC作为前端调用链接器,而不是直接调用。在执行此操作时,用于链接器的选项以-Wl,
为前缀,以便GCC知道传递它们而不是自己解释它们。
在您的情况下,错误消息来自LD本身
表示您的构建系统正在通过GCC将LDFLAGS
直接传递给链接器,而不是。
因此,您应该删除-Wl,
前缀,您的LDFLAGS将改为
(重复最后一个参数可能没有意义,但有益)
这篇关于LDFLAGS的含义是什么的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!