构建环境如何将新的 LDFLAGS 引入自动配置构建
How can a build environment introduce new LDFLAGS into an autoconfig build
我正在两个不同的构建环境(buildroot 和 Yocto)中构建相同的库 (TI GBM)。来自 Yocto 的二进制文件可以工作,但来自 buildroot 的二进制文件由于分段错误而失败。我比较了两个构建系统中 autoconfig 生成的 makefile 并注意到 LDFLAGS 中的差异。
Yocto:
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 中?
当configure
脚本为运行时,它会将环境中某些特定变量的值保存到Makefile中。 LDFLAGS
是其中一个变量,称为“precious variables”。
What is Yocto doing to introduce these new linker directives into the build?
LDFLAGS是linker选项,如果你熟悉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
动态 link 路径中的库:/home/kyle/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib
How is Yocto adding these new linker directives to the makefile?
Yocto 没有主动做任何事情——configure
脚本在做这项工作。它的全部目的是分析它 运行 所在的系统,以确定所需的工具,找出适当的标志,并确定各种系统设施的存在与否。这样做之后,它(通常)会通过填写程序源中包含的模板为您创建一个或多个 Makefile
。它填写的内容之一是 LDFLAGS
变量的值。
configure
如何选择它所做的标志部分取决于它的编写方式,部分取决于它是如何 运行。您可以在 configure
命令行或其环境中指定一些变量,并且可以通过命令行选项影响其他变量。其中一些可以产生级联效应。例如,yocto 环境中 LDFLAGS
的特定选择可能与所选的 C 或 C++ 编译器有关。
我正在两个不同的构建环境(buildroot 和 Yocto)中构建相同的库 (TI GBM)。来自 Yocto 的二进制文件可以工作,但来自 buildroot 的二进制文件由于分段错误而失败。我比较了两个构建系统中 autoconfig 生成的 makefile 并注意到 LDFLAGS 中的差异。
Yocto:
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 中?
当configure
脚本为运行时,它会将环境中某些特定变量的值保存到Makefile中。 LDFLAGS
是其中一个变量,称为“precious variables”。
What is Yocto doing to introduce these new linker directives into the build?
LDFLAGS是linker选项,如果你熟悉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
动态 link 路径中的库:
/home/kyle/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib
How is Yocto adding these new linker directives to the makefile?
Yocto 没有主动做任何事情——configure
脚本在做这项工作。它的全部目的是分析它 运行 所在的系统,以确定所需的工具,找出适当的标志,并确定各种系统设施的存在与否。这样做之后,它(通常)会通过填写程序源中包含的模板为您创建一个或多个 Makefile
。它填写的内容之一是 LDFLAGS
变量的值。
configure
如何选择它所做的标志部分取决于它的编写方式,部分取决于它是如何 运行。您可以在 configure
命令行或其环境中指定一些变量,并且可以通过命令行选项影响其他变量。其中一些可以产生级联效应。例如,yocto 环境中 LDFLAGS
的特定选择可能与所选的 C 或 C++ 编译器有关。