问题复现
在某台机器的路径/path/a下成功build某stable版本下的edk2 BaseTools工具链,清除相关环境变量(甚至清除/path/a下edk2目录)后在同一台机器的新路径/path/b下build相同版本的edk2 BaseTools时出现如下错误:
edk2$ make -C BaseTools
...
g++ -o ../bin/VfrCompile AParser.o DLexerBase.o ATokenBuffer.o EfiVfrParser.o VfrLexer.o VfrSyntax.o VfrFormPkg.o VfrError.o V
frUtilityLib.o VfrCompiler.o -L../libs -lCommon
/usr/bin/ld: ../libs/libCommon.a(CommonLib.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a PI
E object; recompile with -fPIE
/usr/bin/ld:

在不同路径下构建相同稳定版EDK2BaseTools时遇到编译错误,提示需要使用-fPIE选项重新编译。此问题与编译器生成的PIE对象有关,解决方案是修改Makefile添加-fPIE到编译选项。清除环境变量和原有目录后,在新路径构建有时仍会出现问题,可能与遗留的库文件或配置有关。


被折叠的 条评论
为什么被折叠?



