我正在为ARM linux编译AODV。我使用SabreLite作为带有内核版本3.0.35_4.1.0的板。值得一提的是,我正在使用openembedded为我的板创建我的Linux发行版。AODV源代码(http://sourceforge.net/projects/aodvuu/)有一个自述文件,该文件给出了一些关于如何在ARM上安装它的说明,如这里所述。(arm.html)。
我能够升级makefile以便与post 2.6内核版本一起使用(如上所述,我有3.0.35_4.1.0内核版本)。因此,基本上,我要做的是,我必须创建一个模块(比如file.ko),然后将它加载到ARM中(使用不平滑的file.ko命令)。
为此,我使用了一个交叉编译器,其中一些值如下所示:
当我启动"make command“时,我会得到以下错误:
/home/scof/script_emulation/AODV/aodv-uu/lnx/kaodv.o LD M
arm-oe gnueabi-ld:未识别选项'-Wl,-O1'
arm-oe gnueabi-ld:使用--帮助选项获取使用信息
它说链接器有问题。这个链接器来自交叉编译工具,我通常不应该碰它。
无论如何,为了修复上面的错误,我尝试像这样提取LDFLAGS:export =‘’,在此之后,make命令工作,我得到模块kaodv.ko。但是当我把它插入我的手臂检查时,它不起作用。它实际上冻结了我的终端
因此,我的问题是,在编译时是否必须指定LDFLAGS?退出LDFLAGS会对生成的内核模块产生影响吗?实际上,我试着理解哪里可能是问题所在,我唯一想到的就是我不应该手动更改LDFLAGS。但是如果我不更改de,我就会得到一个无法识别的选项错误。
我的第二个问题是,LDFLAGS在ARM编译中的可能价值是什么?
谢谢!!
发布于 2014-08-20 15:33:41
$LDFLAGS:-Wl,-O1 -Wl,--散列样式=gnu -Wl,--需要的-Wl,--需要的
在基于GCC的工具链中调用链接器有两种常见的方法。一个是直接做,另一个是用GCC作为前端调用链接器,而不是直接调用它。在这样做时,为链接器准备的选项以-Wl,作为前缀,以便GCC知道如何通过它们,而不是自己解释它们。
在您的例子中,来自LD本身的错误消息
arm- option gnueabi-ld:未识别选项'-Wl,-O1‘
指示您的构建系统正在直接将LDFLAGS传递给链接器,而不是通过GCC。
因此,您应该删除-Wl,前缀,而您的LDFLAGS应该是
-O1 -散列样式=gnu-按需按需
(最后一个论点的重复可能毫无意义,但却是良性的)
发布于 2014-08-20 14:31:37
-O1是一个告诉链接器优化的选项。我相信这是新的东西,你的链接器可能有点过时了。尝试删除-Wl,-O1,它应该仍然有效。
https://stackoverflow.com/questions/25407320
复制相似问题