我正在两个不同的构建环境(buildroot和Yocto)中构建相同的库(钛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=gnuBuildroot:
LDFLAGS = Yocto如何将这些新的链接器指令添加到makefile?
发布于 2017-11-09 16:51:40
Yocto如何将这些新的链接器指令添加到makefile?
Yocto没有积极地做任何事情--是configure脚本完成了这项工作。它的全部目的是分析其运行的系统,以确定所需的工具,找出适当的标志,并确定是否存在各种系统设施。这样做之后,它(通常)通过填充程序源代码中包含的模板为您创建一个或多个Makefile。它所填充的内容之一是LDFLAGS变量的值。
configure如何选择它所做的标志,部分取决于它是如何编写的,也部分取决于它是如何运行的。您可以在configure命令行上或通过它的环境指定一些变量,并且可以通过命令行选项影响其他变量。其中有些可能会产生级联效应。例如,yocto环境中对LDFLAGS的特定选择可能与所选择的C或C++编译器有关。
发布于 2017-11-09 06:06:23
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发布于 2017-11-09 03:54:25
当运行configure脚本时,它会将环境中某些特定变量的值保存到Makefile中。LDFLAGS是其中一个变量,称为“宝贵变量”。
https://stackoverflow.com/questions/47192400
复制相似问题