2010-09-16 27 views
8

J'espère vraiment qu'il y a de l'aide pour aborder ce sujet. Est-ce que quelqu'un a déjà utilisé lua dans une application qui a besoin d'un support 32 bits et 64 bits? Nous passons actuellement en 64 bits, mais nous avons des problèmes avec les scripts lua compilés par les clients, que nous ne pouvons pas recompiler en utilisant la version 64 bits. Donc, en effet, nous devons être en mesure de charger les fichiers bytecode compilés en utilisant 32 bits lua dans une application 64 bits. Lorsque nous essayons de le faire, nous recevons un message d'erreur:lua 64 bits de transition problème

non-concordance de la machine virtuelle

en test.bin.lua: taille de size_t est 8 mais lu 4

Mais bien sûr, cela est un problème de transition 64bit clair. La chose la plus difficile est de comprendre ce qu'il faut faire sans avoir la possibilité de recompiler les binaires.

Merci

+1

Notez que le chargement du bytecode est déconseillé. plus sûr et plus portable est de charger le code source. – Javier

Répondre

3

Il n'est pas difficile d'adapter lundump.c à la lecture de fichiers de bytecode 32 bits. J'ai posté une feuille de route pour cela dans la liste de diffusion Lua. Si vous avez des problèmes, s'il vous plaît envoyez-moi un email.

+0

Je suis intéressé par ce sujet. Avez-vous un message sur votre liste de diffusion? – Andreas

+0

@Andreas, probablement ceci: http://lua-users.org/lists/lua-l/2006-06/msg00205.html – lhf

+0

Merci. C'était en fait très trivial puisque je devais juste modifier 'lundump.c' pour pouvoir traiter les tailles' size_t' de 4 octets * et * 8 octets. Après cette modification, les versions 32 bits de mon programme sont maintenant magiquement capables d'exécuter le bytecode produit par la version 64 bits et vice versa. Bien sûr, ça ne marchera pas sur 32 bits s'il y a vraiment une chaîne avec plus de 2^32 octets de données mais c'est plutôt improbable je suppose :) Une autre chose que j'ai dû changer était le type de 'Instruction' de' unsigned long 'to' unsigned int' car les instructions doivent être en 32 bits. Notez que je suis toujours sur Lua 5.0.2. – Andreas