No such export getSharedObject in resource es_extended: la soluzione

Ottieni 'No such export getSharedObject in resource es_extended'? Significa che es_extended non è in esecuzione quando lo script lo richiede. Le cause, dall'ordine di avvio alla connessione al database non riuscita.

L'errore completo solitamente appare così, nella console del server o in F8:

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

Il codice è corretto. exports['es_extended']:getSharedObject() è esattamente il modo in cui ESX Legacy distribuisce il suo oggetto. Il problema è quando viene eseguito: in quel momento, es_extended non è lì per rispondere.

1. es_extended inizia dopo lo script

Questa è la causa nove volte su dieci. FiveM avvia le risorse nell'ordine di server.cfg e uno script che richiede ESX nella sua prima riga necessita che es_extended sia già in esecuzione.

Un ordine sicuro per un server 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

Fai attenzione alle categorie di cartelle come [scripts]: ensure [scripts] avvia tutto all'interno, quindi se quella riga viene prima di ensure es_extended, ogni script al suo interno inizia troppo presto.

Puoi anche fare in modo che lo script stesso attenda ESX, dichiarando la dipendenza nel suo fxmanifest.lua:

lua
dependency 'es_extended'

FiveM avvierà prima es_extended o rifiuterà di avviare lo script se manca.

2. es_extended avvio non riuscito

Se es_extended si arresta in modo anomalo all'avvio, le sue esportazioni non esistono mai. Scorri la console del server fino all'inizio e cerca le linee rosse da es_extended prima dell'errore dello script. I soliti colpevoli:

  • Il database. oxmysql non può connettersi (una password errata, un database che non esiste, MySQL non in esecuzione). Controlla mysql_connection_string nel tuo server.cfg:
cfg
set mysql_connection_string "mysql://user:password@localhost/es_extended?charset=utf8mb4"
  • Una dipendenza mancante. Le build ESX Legacy recenti richiedono che oxmysql e ox_lib siano iniziate prima.
  • Tabelle mancanti. Una nuova installazione senza le ESX SQL importate si blocca alla prima query.

Correggi il primo errore e anche l'errore di esportazione scomparirà.

3. La cartella non si chiama es_extended

L'esportazione si trova in una risorsa denominata esattamente es_extended. Questi lo rompono:

  • la cartella è stata rinominata (es_extended-legacy, es_extended_main…);
  • ci sono due copie di es_extended in cartelle diverse e si avvia quella sbagliata;
  • su un host Linux, il nome ha diverse maiuscole (ES_Extended): Linux fa distinzione tra maiuscole e minuscole, Windows no.

Cerca nella tua cartella resources fxmanifest.lua file all'interno delle cartelle chiamate es_extended e conservane esattamente uno.

4. Hai riavviato es_extended mentre il server era in esecuzione

restart es_extended dalla console sembra innocuo, ma ogni script che ha già preso l'oggetto ESX mantiene quello vecchio e tutto ciò che richiama l'esportazione durante il riavvio riceve questo errore. Dopo aver toccato es_extended, riavvia l'intero server o almeno riavvia gli ESX script dopo.

5. Il server non è affatto ESX

Se il tuo server esegue QBCore o QBox, non esiste es_extended e uno script solo ESX fallisce esattamente in questo modo. Cerca nella configurazione dello script un'opzione del framework o utilizza una versione creata per il tuo framework. L'equivalente QBCore di questo errore è coperto nel tentativo di indicizzare un valore nil (globale 'QBCore').

Controllo tra dieci secondi

Nella console del server:

text
ensure es_extended

Se es_extended si avvia in modo pulito e l'errore persiste, è l'ordine di avvio. Se stampa errori, correggili prima. Quindi:

text
restart my_script

Se lo script ora si avvia senza errori, sposta il suo ensure sotto es_extended in server.cfg in modo che funzioni anche dopo un riavvio.

Riepilogo

Causa Come noti Correggi
Avvia ordine Funziona dopo restart my_script ensure es_extended sopra lo script oppure dependency 'es_extended'
es_extended si è bloccato Righe rosse es_extended sopra l'errore Correggi il database o la dipendenza mancante
Nome cartella errato ensure es_extended dice che non riesce a trovarlo Esattamente una cartella chiamata es_extended
Riavvio live Errori subito dopo restart es_extended Riavvia il server
Non un ESX server Nessun es_extended affatto Utilizza la versione QBCore / QBox dello script

Risposte rapide

Cosa significa 'No such export getSharedObject in resource es_extended'?

Il tuo script chiamato exports['es_extended']:getSharedObject() mentre es_extended non era in esecuzione: non era ancora stato avviato, non è stato avviato o ha un nome di cartella diverso.

Come faccio a far sì che es_extended inizi prima del mio script?

Inserisci ensure es_extended sopra lo script in server.cfg, dopo oxmysql e ox_lib. Aggiungendo dependency 'es_extended' al fxmanifest dello script, inoltre, FiveM inizierà es_extended per primo.

Posso riavviare es_extended mentre il server è in esecuzione?

Non è una buona idea: ogni risorsa che contiene l'oggetto ESX mantiene quello vecchio. Riavvia l'intero server o riavvia gli script che utilizzano ESX dopo es_extended.

Script senza questo problema

Advanced BoostingBoosting di veicoli dal tablet: contratti dalla classe D alla S+, crew e coda in tempo reale.Vedi script →CCTV Security CamerasTelecamere posizionabili, un tablet multi-vista in diretta e foto stampate come prove.Vedi script →Crypto MiningCompra un magazzino, costruisci rig pezzo per pezzo e mina monete su un mercato che si muove.Vedi script →

Continua a leggere