No such export getSharedObject in resource es_extended : le correctif
Vous obtenez 'No such export getSharedObject in resource es_extended' ? Cela signifie que es_extended n'est pas en cours d'exécution lorsque votre script le demande. Les causes, de l'ordre de démarrage à l'échec de la connexion à la base de données.
L'erreur complète ressemble généralement à ceci, dans la console du serveur ou dans F8 :
SCRIPT ERROR: @my_script/server/main.lua:1: No such export getSharedObject in resource es_extendedLe code est correct. exports['es_extended']:getSharedObject() est exactement la manière dont ESX Legacy distribue son objet. Le problème, c'est quand il s'exécute : à ce moment-là, es_extended n'est pas là pour répondre.
1. es_extended démarre après votre script
C'est la cause neuf fois sur dix. FiveM démarre les ressources dans l'ordre de votre server.cfg, et un script qui demande ESX dans sa première ligne doit es_extended être déjà en cours d'exécution.
Une commande sécurisée pour un serveur ESX :
# database and libraries first
ensure oxmysql
ensure ox_lib
# the framework
ensure es_extended
ensure [esx]
# everything else after
ensure [scripts]
ensure my_scriptFaites attention aux catégories de dossiers comme [scripts] : ensure [scripts] démarre tout ce qu'il contient, donc si cette ligne arrive avant ensure es_extended, chaque script qu'il contient démarre trop tôt.
Vous pouvez également faire attendre le script lui-même ESX, en déclarant la dépendance dans son fxmanifest.lua :
dependency 'es_extended'FiveM démarrera alors es_extended en premier, ou refusera de démarrer le script s'il est manquant.
2. es_extended n'a pas pu démarrer
Si es_extended plante au démarrage, ses exports n'existent jamais. Faites défiler la console du serveur vers le haut et recherchez les lignes rouges de es_extended avant l'erreur de votre script. Les coupables habituels :
- La base de données. oxmysql ne peut pas se connecter (un mot de passe erroné, une base de données qui n'existe pas, MySQL ne fonctionne pas). Vérifiez
mysql_connection_stringdans votreserver.cfg:
set mysql_connection_string "mysql://user:password@localhost/es_extended?charset=utf8mb4"- Une dépendance manquante. Les builds ESX Legacy récentes nécessitent oxmysql et ox_lib démarrées avant elles.
- Tables manquantes. Une nouvelle installation sans les ESX SQL importés plante à la première requête.
Corrigez cette première erreur et l'erreur d'exportation disparaîtra avec elle.
3. Le dossier ne s'appelle pas es_extended
L'export réside dans une ressource nommée exactement es_extended. Ceux-ci le brisent :
- le dossier a été renommé (
es_extended-legacy,es_extended_main…); - il y a deux copies de es_extended dans des dossiers différents, et la mauvaise démarre ;
- sur un hôte Linux, le nom a des majuscules différentes (
ES_Extended) : Linux est sensible à la casse, Windows ne l'est pas.
Recherchez dans votre dossier resources des fichiers fxmanifest.lua dans des dossiers appelés es_extended et conservez-en exactement un.
4. Vous avez redémarré es_extended alors que le serveur était en cours d'exécution
restart es_extended de la console semble inoffensif, mais chaque script qui a déjà pris l'objet ESX conserve l'ancien, et tout ce qui appelle l'exportation lors du redémarrage obtient cette erreur. Après avoir touché es_extended, redémarrez l'ensemble du serveur, ou au moins redémarrez les scripts ESX après.
5. Le serveur n'est pas ESX du tout
Si votre serveur exécute QBCore ou QBox, il n'y a pas de es_extended et un script uniquement ESX échoue exactement comme ceci. Recherchez dans la configuration du script une option de framework ou utilisez une version conçue pour votre framework. L'équivalent QBCore de cette erreur est abordé dans la tentative d'indexation d'une valeur nil (globale 'QBCore').
Vérification dans dix secondes
Dans la console du serveur :
ensure es_extendedSi es_extended démarre proprement et que l'erreur persiste, il s'agit de l'ordre de démarrage. S'il imprime des erreurs, corrigez-les d'abord. Puis :
restart my_scriptSi le script démarre maintenant sans erreur, déplacez son ensure en dessous de es_extended dans server.cfg pour qu'il fonctionne également après un redémarrage.
Résumé
| Cause | Comment vous le remarquez | Corriger |
|---|---|---|
| Commencer la commande | Fonctionne après restart my_script |
ensure es_extended au-dessus du script, ou dependency 'es_extended' |
| es_extended a planté | Lignes es_extended rouges au-dessus de l'erreur | Corriger la base de données ou la dépendance manquante |
| Nom de dossier incorrect | ensure es_extended dit qu'il ne peut pas le trouver |
Exactement un dossier appelé es_extended |
| Redémarrage en direct | Erreurs juste après restart es_extended |
Redémarrez le serveur |
| Pas un serveur ESX | Pas es_extended du tout | Utiliser la version QBCore / QBox du script |
Réponses rapides
Que signifie « No such export getSharedObject in resource es_extended » ?
Votre script a appelé exports['es_extended']:getSharedObject() alors que es_extended n'était pas en cours d'exécution : il n'avait pas encore démarré, il n'a pas démarré ou son nom de dossier est différent.
Comment faire démarrer es_extended avant mon script ?
Mettez ensure es_extended au-dessus du script dans server.cfg, après oxmysql et ox_lib. L'ajout de dependency 'es_extended' au fxmanifest du script permet également à FiveM de démarrer es_extended en premier.
Puis-je redémarrer es_extended pendant que le serveur est en cours d'exécution ?
Ce n'est pas une bonne idée : chaque ressource qui contient l'objet ESX conserve l'ancien. Redémarrez l'ensemble du serveur ou redémarrez les scripts qui utilisent ESX après es_extended.
Des scripts sans ce problème
Advanced BoostingDu boosting de véhicules piloté par tablette : contrats de classe D à S+, crews et file d’attente en direct.Voir le script →
CCTV Security CamerasDes caméras à placer, une tablette multi-vues en direct et des photos imprimées comme preuves.Voir le script →
Crypto MiningAchetez un entrepôt, montez vos rigs pièce par pièce et minez sur un marché qui bouge.Voir le script →