【问题标题】:How can a build environment introduce new LDFLAGS into an autoconfig build构建环境如何将新的 LDFLAGS 引入自动配置构建
【发布时间】:2017-11-09 01:21:17
【问题描述】:

我正在两个不同的构建环境(buildroot 和 Yocto)中构建同一个库 (TI GBM)。 Yocto 的二进制文件可以工作,但 buildroot 的二进制文件由于分段错误而失败。我比较了两个构建系统中由 autoconfig 生成的 makefile,发现 LDFLAGS 存在差异。

约克托:

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

构建根目录:

LDFLAGS = 

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

【问题讨论】:

    标签: autotools yocto autoconf buildroot


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-13
          • 2018-09-06
          • 2014-02-06
          相关资源
          最近更新 更多