与pcre链接时无法启用LTO

时间:2019-02-09 12:33:24

标签: c++ linux clang pcre lto

我正在为一个名为AMX Mod X的开源项目做贡献。它使用了非常简单的定制构建系统(称为AMBuild)。该项目是在Linux上使用Clang构建的。

我只是通过传递编译时和链接时参数来尝试启用LTO。

我添加了一个链接时间参数

-O2 -flto=thin -fuse-ld=lld -Wl,-z,notext

并作为编译时参数。

-O2 -flto=thin -fPIC

我在仔细搜索后选择了此配置。看来我非常接近实现完整的LTO。只有一个模块无法构建,它与pcre链接。

(由构建系统生成的)链接命令是这样的。

clang-4.0 _public_sdk_amxxmodule.o module.o CRegEx.o utils.o -m32 -O2 -flto=thin -fuse-ld=lld -Wl,-z,notext -ldl -lm -lgcc_eh ../../../support/versionlib/version/libversion.a /home/travis/build/alliedmodders/amxmodx/modules/regex/lib_linux/libpcre.a -shared -o regex_amxx_i386.so

链接错误很多,但是非常相似。这就是其中之一。

/usr/lib/llvm-4.0/bin/ld.lld: error: pcre_compile.c:(function add_to_class): can't create dynamic relocation R_386_32 against symbol '_pcre_ucd_stage1' defined in /home/travis/build/alliedmodders/amxmodx/modules/regex/lib_linux/libpcre.a(libpcre_la-pcre_ucd.o)

read认为LLD和bfd具有不同的默认值,并且-Wl,-z,notext应该起作用,但没有任何效果。

libpcre.a只是与存储库捆绑在一起的二进制文件。 AMBuild并非从源头上构建pcre。这是我的PR,您会发现travis构建失败,并且更仔细地阅读了日志。不要害怕自定义构建系统,所有执行的命令都以最详细的形式打印到终端。没问题。

与pcre链接时如何启用LTO?我真的不在乎其他编译器(gcc,icc等)或其他操作系统。

UPD LTO 代表 L 墨水 T ime O 优化< / p>

0 个答案:

没有答案