Jenkins Android 构建失败 - 无法构建 libwebviewchromium.so
Jenkins Android build fails - can't build libwebviewchromium.so
需要一些建议或想法。
我正在尝试使用 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 时却失败了。能否请您与我分享您的想法?
P.S。构建机器有 24GB RAM 和 15GB 交换文件,以及一个 512GB SSD 闪存盘(62% 可用)。 OS 是 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
I wonder how it comes that the same operation can be successful when using a console and fail when using Jenkins.
因为 Jenkins 可能不会 运行 与同一用户(或在同一工作站上,如果执行作业的代理是单独的机器)
仔细检查以下环境变量是否存在差异:
- 你的命令行,在那里你可以成功运行你的命令(在你的命令后输入
env
)
- 你的(失败的)工作environment variables you can see associated
例如,LD_LIBRARY_PATH
差异可以解释两个构建之间的差异。
用户 jenkins
有自己的 ~/.bashrc
,可能缺少环境变量。
暂时为 jenkins
启用登录 shell,设置环境,然后再次禁用它。
当能够以用户 jenkins
的身份手动构建时,它也应该在自动构建时构建。
确保编译时包含所有头文件和库链接。 Undefined Reference 错误主要是由于这两个原因造成的。
问题已解决。
我们从另一台服务器复制了 Jenkins/AOSP 设置,但复制有问题。
ccache 的清理解决了这个问题。执行 "ccache -c" 命令后,一切正常。
需要一些建议或想法。
我正在尝试使用 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 时却失败了。能否请您与我分享您的想法?
P.S。构建机器有 24GB RAM 和 15GB 交换文件,以及一个 512GB SSD 闪存盘(62% 可用)。 OS 是 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
I wonder how it comes that the same operation can be successful when using a console and fail when using Jenkins.
因为 Jenkins 可能不会 运行 与同一用户(或在同一工作站上,如果执行作业的代理是单独的机器)
仔细检查以下环境变量是否存在差异:
- 你的命令行,在那里你可以成功运行你的命令(在你的命令后输入
env
) - 你的(失败的)工作environment variables you can see associated
例如,LD_LIBRARY_PATH
差异可以解释两个构建之间的差异。
用户 jenkins
有自己的 ~/.bashrc
,可能缺少环境变量。
暂时为 jenkins
启用登录 shell,设置环境,然后再次禁用它。
当能够以用户 jenkins
的身份手动构建时,它也应该在自动构建时构建。
确保编译时包含所有头文件和库链接。 Undefined Reference 错误主要是由于这两个原因造成的。
问题已解决。 我们从另一台服务器复制了 Jenkins/AOSP 设置,但复制有问题。 ccache 的清理解决了这个问题。执行 "ccache -c" 命令后,一切正常。