在没有 LTO 的情况下构建 Chromium、WebRTC

Posted

技术标签:

【中文标题】在没有 LTO 的情况下构建 Chromium、WebRTC【英文标题】:Building Chromium, WebRTC without LTO 【发布时间】:2014-05-13 18:09:19 【问题描述】:

我在 Arch Linux x86_64 上,正在尝试构建 WebRTC 库。执行此操作时出现编译错误:

[ghilliard@diadem trunk]$ ninja -C out/Release peerconnection_server
ninja: Entering directory `out/Release'
[1/1] LINK peerconnection_server
FAILED: c++ -Wl,-z,now -Wl,-z,relro -Wl,--fatal-warnings -pthread -Wl,-z,noexecstack -fPIC -B/home/ghilliard/Code/webrtc-attempt2/trunk/third_party/binutils/Linux_x64/Release/bin -Wl,--disable-new-dtags -m64 -Wl,--icf=none -fuse-ld=gold -Wl,-O1 -Wl,--as-needed -Wl,--gc-sections -o peerconnection_server -Wl,--start-group obj/talk/examples/peerconnection/server/peerconnection_server.data_socket.o obj/talk/examples/peerconnection/server/peerconnection_server.main.o obj/talk/examples/peerconnection/server/peerconnection_server.peer_channel.o obj/talk/examples/peerconnection/server/peerconnection_server.utils.o obj/talk/libjingle.a obj/net/third_party/nss/libcrssl.a obj/third_party/jsoncpp/libjsoncpp.a  -Wl,--end-group -lsmime3 -lnss3 -lnssutil3 -lplds4 -lplc4 -lnspr4 -ldl -lcrypto -lrt -lXext -lX11 -lXcomposite -lXrender -lexpat
/home/ghilliard/Code/webrtc-attempt2/trunk/third_party/binutils/Linux_x64/Release/bin/ld.gold: -plugin: unknown option
/home/ghilliard/Code/webrtc-attempt2/trunk/third_party/binutils/Linux_x64/Release/bin/ld.gold: use the --help option for usage information
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

链接时间优化似乎存在问题。但是,我无法弄清楚如何在不启用 LTO 的情况下构建 WebRTC。如果我手动运行失败的命令并附加-fno-lto,则链接正常。如何在 gyp 配置中添加或更改编译器/链接器标志,以便将其应用于所有内容?

【问题讨论】:

【参考方案1】:

ninja 不尊重环境变量,但 gyp 尊重。

所以在设置完 LDFAGS 环境变量后,你必须运行gyp_chromium 让 gyp 生成正确的 ninja 构建文件。

export LDFLAGS='-fno-lto' build/gyp_chromium ninja -C out/Release peerconnection_server

【讨论】:

我现在遇到了其他构建错误(我可能应该弄清楚如何检查 WebRTC 的稳定版本)但这似乎解决了链接器的抱怨。谢谢!【参考方案2】:

您可能会尝试在构建之前在环境变量中设置编译器/链接器标志:

export CFLAGS="$CFLAGS -fno-lto"
export CXXFLAGS="$CXXFLAGS -fno-lto"
export LDFLAGS="$LDFLAGS -fno-lto"
ninja -C out/Release

【讨论】:

以上是关于在没有 LTO 的情况下构建 Chromium、WebRTC的主要内容,如果未能解决你的问题,请参考以下文章

防止 GCC LTO 删除函数

为啥 Qt WebEngine Chromium 在 MSVS Express 2015 下构建失败?

自定义Firefox / Chromium安装预安装扩展(非企业)

为 Android 构建 Chromium 时参数无效

带有 vs2013 的 Windows 7 上的 Chromium 构建失败(警告为错误)

为 Android 构建 Chromium 时缺少/未找到 android_gyp