Un conseil ou une idée est nécessaire.
J'essaie de construire Android 5.1.1 Lollipop avec Jenkins. Mais il ne parvient pas à construire 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
En même temps, lorsque j'essaye de le construire manuellement, cela réussit:
. build/envsetup.sh
set_stuff_for_environment
lunch zh2_qemu_eng
make clean
make -j24
Je me demande comment il peut arriver que la même opération puisse réussir avec une console et échouer avec Jenkins. Pourriez-vous s'il vous plaît partager vos idées avec moi?
P.S. La machine de construction dispose de 24 Go de RAM et de 15 Go, ainsi que d'un fichier d'échange, et d'un disque flash SSD de 512 Go (62% disponible). Le système d'exploitation est Ubuntu 14.04LTS, 64 bit.
$ free -m
total used free shared buffers cached
Mem: 24021 22079 1942 75 4778 8768
-/+ buffers/cache: 8532 15488
Swap: 16036 345 15691
Le problème est résolu . Nous avons copié la configuration Jenkins/AOSP à partir d'un autre serveur et quelque chose n'allait pas avec la copie .Le nettoyage de ccache a résolu le problème. Après avoir exécuté la commande "ccache -c", tout a bien fonctionné.
Je me demande comment il peut arriver que la même opération puisse réussir avec une console et échouer avec Jenkins.
Jenkins pouvant ne pas s'exécuter avec le même utilisateur (ou sur le même poste de travail, si l'agent qui exécute le travail est un ordinateur distinct)
Vérifiez s'il y a des différences de variables d'environnement entre:
env
après vos commandes)Par exemple, une différence LD_LIBRARY_PATH
pourrait expliquer la différence entre les deux versions.
Assurez-vous que tous les fichiers d'en-tête sont inclus et bibliothèques liées au moment de la compilation. Les erreurs Undefined Reference résultent principalement de ces deux raisons.
l'utilisateur jenkins
a son propre ~/.bashrc
, qui peut ne pas contenir de variables d'environnement.
activer temporairement le login Shell pour jenkins
, configurer l'environnement, puis le désactiver à nouveau.
lorsqu’il est possible de construire manuellement en tant qu’utilisateur jenkins
, il devrait également être construit lorsqu’il est automatisé.