[Lua] Utiliser Lua dans du C

Utiliser Lua dans du C [Lua] - C - Programmation

Marsh Posté le 16-11-2007 à 23:05:12    

Salut à tous !
 
Je cherche à utiliser LUA dans du C. Le seul hic, c'est que j'ai des notions de C, mais la programmation de microcontroleurs est bien différente de la programmation pour application: dans le sens où je suis perdus avec ces IDE, avec ces compilateurs...
 
Bon, mon idée, c'est de suivre suivre ce tuto : http://mdeverdelhan.developpez.com [...] tutoriel1/ mais, je me retrouve bloqué à la fin du II.
 
Je n'arrive pas à compiler, pourtant, j'ai bien linké les librairies:

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "lua\lua.h"
  4. #include "lua\lualib.h"
  5. #include "lua\lauxlib.h"
  6. int main(int argc, char *argv[])
  7. {
  8.     lua_State * state;
  9.     // on créer un contexte d'exécution de Lua
  10.     state = lua_open();
  11.     // on charge les bibliothèques standards de Lua
  12.     luaL_openlibs(state);
  13.     // on lance le script lua
  14.     if (luaL_dofile(state,"script.lua" )!=0)
  15.     {
  16.         // il y a eu une erreur dans le script
  17.         fprintf(stderr,"%s\n",lua_tostring(state,-1));
  18.         exit(0);
  19.     }
  20.     system("PAUSE" );
  21.     return 0;
  22.     // Fin de la fonction
  23. }


 
MAis bon, impossible à compiler, ni même éxécuter ce code de base :/
 
Merci de votre aide! :D

Reply

Marsh Posté le 16-11-2007 à 23:05:12   

Reply

Marsh Posté le 17-11-2007 à 11:23:21    

Et si tu nous donnais le message d'erreur de ton compilo?

Reply

Marsh Posté le 17-11-2007 à 14:57:38    

Oui, trés juste, j'ai oublié l'essentiel ... XD
 

Code :
  1. Project   : Console application
  2. Compiler  : GNU GCC Compiler (called directly)
  3. Directory : D:\Le C\lua 01\
  4. --------------------------------------------------------------------------------
  5. Switching to target: default
  6. Linking console executable: D:\Documents de Robin\Le C\lua 01\Test_Lua.exe
  7. .objs\main.o:main.c:(.text+0x2b): undefined reference to `luaL_newstate'
  8. .objs\main.o:main.c:(.text+0x39): undefined reference to `luaL_openlibs'
  9. .objs\main.o:main.c:(.text+0x4c): undefined reference to `luaL_loadfile'
  10. .objs\main.o:main.c:(.text+0x73): undefined reference to `lua_pcall'
  11. .objs\main.o:main.c:(.text+0x94): undefined reference to `lua_tolstring'
  12. collect2: ld returned 1 exit status
  13. Process terminated with status 1 (0 minutes, 2 seconds)
  14. 0 errors, 0 warnings

Message cité 1 fois
Message édité par rc_jk78 le 17-11-2007 à 14:58:32
Reply

Marsh Posté le 17-11-2007 à 15:05:42    

rc_jk78 a écrit :

Je n'arrive pas à compiler, pourtant, j'ai bien linké les librairies:

Pourtant le message d'erreur dit justement que le linker n'a pas pas reussi a trouver les fonctions lua, comme si tu avais oublie de lui preciser de linker avec la lib lua. Quel environnement utilises-tu, et comment as-tu installe la lib lua ?

Reply

Marsh Posté le 17-11-2007 à 15:26:22    

J'utilise CodeBlock.
 
Ce que j'ai fait, j'ai chopé les sources sur lua.org, puis j'ai placé tous les .cet .h dans un sous dossier 'lua' de mon projet. Et je link vers les 4 headers, comme indiqué ds le readme:
#include "lua\lua.h"
#include "lua\lualib.h"
#include "lua\lauxlib.h"
 
Apres, je ne sais pas trop ce que ca devrait donner...

Reply

Marsh Posté le 17-11-2007 à 15:36:28    

Tu as dû oublier d'inclure la bibliothèque au linker.
 
C'est une option -l<le nom de la bibliothèque LUA à inclure> à ajouter dans les options du compilateur.

Reply

Marsh Posté le 22-11-2007 à 20:37:36    

dsl, j'ai pas eu l'occaz de retoucher à lua cette semaine... je verrais peut etre ce we ;)
 
merci en tout cas :D

Reply

Marsh Posté le 22-11-2007 à 21:06:15    

rc_jk78 a écrit :

Et je link vers les 4 headers

On ne "link" pas vers des headers.  
Ton probleme vient probablement de ta confusion entre la phase d'edition de liens et celle de compilation.  
 
Si je simplifie :
fichier C avec inclusions de .h ------ preprocessing ------> code C ------- compilation -----> fichier .o -------- edition de liens (link) ------> fichier executable
 
Une librairie de developpement, sous sa forme binaire, se compose generalement d'un ou plusieurs fichiers .h a inclure dans un fichier C, et d'un fichier .a, qui contient le code executable de la librairie.
 
Au preprocessing, tout se passe comme si le contenu de fichier.h etait copie-colle a l'endroit ou tu fais #include "fichier.h".  
A la compilation, la librairie n'intervient pas.
A l'edition de lien, il faut que tu precises au linker ou il doit aller chercher le code des fonctions de ta librairie. Ce code se trouve donc dans ton .a (ou .lib sous certains compilateurs), et si ton fichier est, par exemple libMachin.a, il faut le placer dans le repertoire "lib" de ton compilateur et rajouter a ta ligne de commande -lMachin, comme l'a precise Elmoricq.
 

Reply

Marsh Posté le 23-11-2007 à 11:22:35    

rc_jk78 a écrit :

Oui, trés juste, j'ai oublié l'essentiel ... XD
 

Code :
  1. Directory : D:\Le C\lua 01\
  2. Linking console executable: D:\Documents de Robin\Le C\lua 01\Test_Lua.exe



Ca fait bizarre de mettre l'executable dans un repertoire aussi different de celui ou tu code? tu ne t'es pas trompé dans les chemins?

Reply

Marsh Posté le 02-12-2007 à 16:50:28    

Problème résolu rc_jk78 ?
 
Parce que vu ce que tu décris c'est simplement un oublie de ta part lorsque tu as spécifié au linker le chemin vers la lib Lua (Lua.1.5.a je crois pour Code::Block) comme l'a dit Elmoricq et l'a très bien expliqué Ace17 :). Ou alors ça vient d'autre part...
 
Et justement, j'ai eu pour ma part un problème similaire intervenant à l'édition des liens mais sous Visual Studio. J'ai pourtant bien préciser le chemin vers la lib Lua et pourtant le linker refusait de lier les fichiers en me mettant des "undefined Reference" comme toi. L'erreur venait en fait du header inclus : il ne fallait pas mettre lua.h, lualib.h et lauxlib.h mais seulement lua.hpp qui contient déjà les headers cité mais correctement défini pour être compilé avec un compilateur C++.
Tu utilises GCC ce qui devrait normalement te faire compiler en C et donc ne pas avoir la même erreur que moi. Mais si malgrès tout ça ne marche toujours pas, tu peux essayer en mettant lua.hpp et voir ce que ça donne. Au pire t'as une erreur de compilation et tu sera sûr que le problème vient bien de la définition des library à utiliser dans ton projet.
 
 :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed