Linux kernel LDFLAGS的含义是什么
我正在尝试为ARM linux编译AODV。我使用SabreLite作为内核版本为3.0.35_4.1.0的板。值得一提的是,我正在使用openembedded为我的主板创建Linux发行版。 AODV源代码()有一个自述文件,它给出了如何在ARM上安装它的一些指示,如这里所述。 () 我能够升级makefile以便与Post2.6内核版本一起使用(如上所述,我有3.0.35_4.1.0内核版本)。 所以,基本上,我要做的是创建一个模块(比如file.ko),然后将其加载到ARM中(使用insmod file.ko命令) 为此,我使用了一个交叉编译器,其中一些值如下所述:Linux kernel LDFLAGS的含义是什么,linux-kernel,cross-compiling,ldflags,Linux Kernel,Cross Compiling,Ldflags,我正在尝试为ARM linux编译AODV。我使用SabreLite作为内核版本为3.0.35_4.1.0的板。值得一提的是,我正在使用openembedded为我的主板创建Linux发行版。 AODV源代码()有一个自述文件,它给出了如何在ARM上安装它的一些指示,如这里所述。 () 我能够升级makefile以便与Post2.6内核版本一起使用(如上所述,我有3.0.35_4.1.0内核版本)。 所以,基本上,我要做的是创建一个模块(比如file.ko),然后将其加载到ARM中(使用insm
- echo$CC: arm oe linux gnueabi gcc-march=armv7-a-mthumb interwork-mfloat abi=hard-mfpu=neon-mtune=cortex-a9-sysroot=/usr/local/oecore-x86_64/sysroot/cortexa9hf vfp neon oe linux gnueabi
- echo$ARCH=arm
- echo$CFLAGS:O2-pipe-g-feliminate未使用的调试类型
- echo$LD: arm oe linux gnueabi ld--sysroot=/usr/local/oecore-x86_64/sysroot/cortexa9hf vfp neon oe linux gnueabi
- echo$LDFLAGS: -Wl,-O1-Wl,--hash style=gnu-Wl,--as-needed-Wl,--as-needed
谢谢
-O1
是一个通知链接器进行优化的选项。我相信这是新的,你的链接器可能有点过时了。尝试删除-Wl,-O1
,它应该仍然有效。-O1
是一个通知链接器进行优化的选项。我相信这是新的,你的链接器可能有点过时了。尝试删除-Wl,-O1
,它仍然可以工作
echo$LDFLAGS:-Wl,-O1-Wl,--hash style=gnu-Wl,--as-needed-Wl,--as-needed
在基于GCC的工具链中,有两种调用链接器的常用方法。一种是直接执行,另一种是使用GCC作为前端来调用链接器,而不是直接调用它。执行此操作时,链接器的选项前缀为-Wl,
,以便GCC知道如何传递它们,而不是自己解释它们
在您的情况下,来自LD本身的错误消息
arm oe linux gnueabi ld:无法识别的选项'-Wl,-O1'
指示生成系统正在将LDFLAGS
直接传递到链接器,而不是通过GCC
因此,您应该删除-Wl,
前缀,而您的LDFLAGS将改为
-O1——hash style=gnu——根据需要——根据需要
(重复上一个论点可能毫无意义,但却是善意的)
echo$LDFLAGS:-Wl,-O1-Wl,--hash style=gnu-Wl,--as-needed-Wl,--as-needed
在基于GCC的工具链中,有两种调用链接器的常用方法。一种是直接执行,另一种是使用GCC作为前端来调用链接器,而不是直接调用它。执行此操作时,链接器的选项前缀为-Wl,
,以便GCC知道如何传递它们,而不是自己解释它们
在您的情况下,来自LD本身的错误消息
arm oe linux gnueabi ld:无法识别的选项'-Wl,-O1'
指示生成系统正在将LDFLAGS
直接传递到链接器,而不是通过GCC
因此,您应该删除-Wl,
前缀,而您的LDFLAGS将改为
-O1——hash style=gnu——根据需要——根据需要
(上一个参数的重复可能是毫无意义的,但却是良性的)仅仅删除一个(
-Wl,-O1
)标志是否可以让事情正常工作?@EtanReisner我已经尝试删除(-Wl,-01),但我得到了以下错误:arm oe linux gnueabi ld:unrecogned option'-Wl,--hash style=gnu'这就是为什么我将它们全部撤回,以获得显然不工作的模块。您可以使用V=1运行make。有关更多信息,请参阅和参考。有对LDFLAGS
等的引用。此外,您不应触摸这些选项。内核通常假定某些选项用于生成代码。通常,您可以通过menuconfig更改选项。否则,您的问题将由man ld
回答。例如,kbuild系统应通过menuconfig和.config变量确定您的CPU类型,并使用适当的-march
和-mfpu
选项。在支持多台机器的情况下,使用其他选项将最低基础机器与特定于机器/arch的文件一起使用。此问题是否特定于arm?公认的答案不是。我们可以删除标签吗?只删除一个(-Wl,-O1
)标志是否可以让事情正常运行?@EtanReisner我已经尝试删除(-Wl,-01),一个