构建环境如何将新的LDFLAGS引入到自动构建中

时间:2017-11-09 01:21:18

标签: autotools yocto autoconf buildroot

我在两个不同的构建环境(buildroot和Yocto)中构建相同的库(TI GBM)。来自Yocto的二进制文件工作,但是buildroot的二进制文件由于分段错误而失败。我比较了两个构建系统中autoconfig生成的makefile,并注意到了LDFLAGS的差异。

Yocto:

IntPtr

Buildroot里面:

LDFLAGS =  -L/home/kyle/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib -Wl,-rpath-link,/home/kyle/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib -Wl,-O1 -Wl,--hash-style=gnu

Yocto如何将这些新的链接器指令添加到makefile中?

3 个答案:

答案 0 :(得分:1)

  

Yocto在将这些新的链接器指令引入构建时做了什么?

LDFLAGS是链接器选项,如果您熟悉gcc和其他命令行编译器前端,make将以这种方式在内部调用gcc(假设此处为c ++):

g++ CPPFLAGS CXXFLAGS SOURCE_CODE LDFLAGS LDADD

以下是您在Yocto中指出的LDFLAGS的外观示例:

g++ -Wall -g -O3 -o output myfiles... -L/home/kyle/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib -Wl,-rpath-link,/home/kyle/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib -Wl,-O1 -Wl,--hash-style=gnu

至于LDFLAGS值的含义是什么

-L/home/kyle/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib -Wl,-rpath-link,/home/kyle/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib -Wl,-O1 -Wl,--hash-style=gnu` 

这意味着:

  • 搜索目录中的库:

    /home/kyle/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib

  • 动态链接路径中的库:/home/kyle/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib

答案 1 :(得分:1)

  

Yocto如何将这些新的链接器指令添加到makefile中?

Yocto没有积极做任何事情 - 正是configure脚本完成了这项工作。其全部目的是分析运行它的系统,以识别所需的工具,找出适当的标志,并确定是否存在各种系统设施。完成后,它(通常)通过填写程序源包含的模板为您创建一个或多个Makefile。它填写的内容之一是LDFLAGS变量的值。

configure如何选择它所做的标志部分取决于它是如何编写的,部分取决于它是如何运行的。您可以在configure命令行或其环境中指定一些变量,并且可以通过命令行选项影响其他变量。其中一些可能具有级联效应。例如,yocto环境中LDFLAGS的特定选择可能与所选的C或C ++编译器有关。

答案 2 :(得分:0)

运行configure脚本时,它会将环境中某些特定变量的值保存到Makefile中。 LDFLAGS是其中一个变量,名为“precious variables”。