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 :

text
SCRIPT ERROR: @my_script/server/main.lua:1: No such export getSharedObject in resource es_extended

Le 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 :

cfg
# database and libraries first
ensure oxmysql
ensure ox_lib

# the framework
ensure es_extended
ensure [esx]

# everything else after
ensure [scripts]
ensure my_script

Faites 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 :

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_string dans votre server.cfg :
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 :

text
ensure es_extended

Si 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 :

text
restart my_script

Si 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 →

À lire aussi