Jenkins Android构建失败 - 无法构建libwebviewchromium.so

8

需要一些建议或想法。

我正在尝试使用Jenkins构建Android 5.1.1 Lollipop。但是它在构建libwebviewchromium.so时失败:

...
out/target/product/generic/obj/GYP/shared_intermediates/blink/bindings/core/v8/V8SVGNumber.cpp:55: error: undefined reference to 'blink::SVGNumberTearOff::setValue(float, blink::ExceptionState&)'
out/target/product/generic/obj/STATIC_LIBRARIES/third_party_WebKit_Source_core_webcore_generated_gyp_intermediates/SVGElementFactory.cpp:383: error: undefined reference to 'blink::SVGMetadataElement::create(blink::Document&)'
external/chromium_org/third_party/WebKit/Source/core/svg/SVGNumberTearOff.h:45: error: undefined reference to 'blink::SVGNumberTearOff::SVGNumberTearOff(WTF::PassRefPtr<blink::SVGNumber>, blink::SVGElement*, blink::PropertyIsAnimValType, blink::QualifiedName const&)'
collect2: error: ld returned 1 exit status
make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/libwebviewchromium_intermediates/LINKED/libwebviewchromium.so] Error 1

同时,当我尝试手动构建时,它成功了:

. build/envsetup.sh
set_stuff_for_environment
lunch zh2_qemu_eng
make clean
make -j24

我想知道为什么在使用控制台时相同的操作可以成功,但在使用Jenkins时会失败。您能否与我分享您的想法?

附言:构建机器具有24GB的RAM和15GB的交换文件,并且有一个512 GB的SSD闪存磁盘(可用62%)。 操作系统是Ubuntu 14.04LTS,64位。

$ free -m
             total       used       free     shared    buffers     cached
Mem:         24021      22079       1942         75       4778       8768
-/+ buffers/cache:       8532      15488
Swap:        16036        345      15691
4个回答

5
我不知道为什么在使用控制台时相同的操作可以成功,而在使用Jenkins时却失败了。这可能是因为Jenkins可能不是以相同的用户身份运行(或者如果执行作业的代理是单独的计算机,则可能不在同一工作站上)。请仔细检查以下内容是否存在任何环境变量差异:
- 您可以成功运行命令的命令行(在命令后键入“env”) - 与您(失败的)作业相关联的环境变量 例如,LD_LIBRARY_PATH的差异可能解释了两个构建之间的差异。

2
除了LD_LIBRARY_PATH之外,我还需要注意哪些其他环境变量? - Vladimir Lindemann
2
@VladimirLindemann,请查找您的Bash会话环境变量列表与Jenkins作业中的环境变量列表之间的任何差异。 - VonC

3

编译时,请确保所有头文件已包含库已链接。由这两个原因导致主要的未定义引用错误。


2

用户jenkins有自己的~/.bashrc文件,其中可能缺少环境变量。

暂时为jenkins用户启用登录shell,设置环境变量,然后再禁用它。

当手动以jenkins用户构建成功后,也应该可以自动化构建。


2
实际上,我尝试使用那个用户进行构建。但我的构建系统使用了一个复杂的Jenkins脚本。该脚本设置了所有环境变量。我认为我应该仔细比较这些。 - Vladimir Lindemann
3
请运行 printenv 命令,分别以普通用户和用户 jenkins 的身份运行。比较脚本的实际结果比较脚本本身更容易。可能存在一些差异——可能是不同的权限。如果情况是这样的话,将普通用户添加到 jenkins 组中可能也会有所帮助,因为它会授予用户 jenkins 组访问权限,否则该用户将无法访问该组。 - Martin Zeitler

1
问题已解决。 我们从另一台服务器复制了Jenkins/AOSP设置,但复制时出现了问题。 清理ccache解决了问题。执行“ccache -c”命令后,一切正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接