2015-03-06 5 views
1

Je suis en train de faire un programme NESC à utiliser avec TOSSIM (simulateur de TinyOS), y compris la bibliothèque gmp Voici un échantillon de mon codeNESC/GMP Undefined Symbole

event void Boot.booted() 
     { 
       //dbg("MAPC", "Booted\n"); 
       //int g = 2; 
       const char * const num = "10387922662657137735272585565990678424704150824246588991894422884684285337052622755228646547137908394766337363629003511269209591656314972254747436173398683"; 
       int err; 

       mpz_t n; 
       err = mpz_init_set_str(n, num, 10); 

       dbg("MAPC","%d",sizeof(n)); 

       mpz_clear(n); 
     } 

La compilation fonctionne très bien à l'aide make micaz sim ou env "CFLAGS = -lgmp" make micaz sim Lorsque je tente de l'exécuter via un script python je reçois cette erreur:

Traceback (most recent call last): 
    File "kdk.py", line 4, in <module> 
    from TOSSIM import * 
    File "/opt/tinyos-2.1.2/apps/MAP/TOSSIM.py", line 7, in <module> 
    import _TOSSIM 
ImportError: /opt/tinyos-2.1.2/apps/MAP/_TOSSIMmodule.so: undefined symbol: __gmpz_init_set_str 

Répondre

1

l'un des symboles de libgmp ne peuvent être résolus et il semble que ce n'est pas compilé avec cette lib.

Vous devriez essayer d'utiliser LDFLAGS pour -lgmp au lieu de CFLAGS. Cependant LDFLAGS remplace probablement dans makefile, donc, vous feriez mieux de le mettre à jour dans makefile.

+0

Mon Makefile contient les deux lignes suivantes: 'component = MAPAppC comprennent' $ (MAKERULES) donc je suppose qu'il ya une autre makefile, y compris tout le reste. Est-ce que je peux ajouter mes LDFLAGS à ceux déjà utilisés? – Crownless

+0

@Crownless cela dépend du makefile, il peut avoir des variables spéciales à cet effet, par exemple. EXTERNAL_LIBRARIES, il devrait y avoir quelques docs – pmod

+0

J'ai utilisé LDFLAGS, il n'a rien écrasé, la position -lgmp est passée à ce qu'elle devrait être, mais j'ai toujours cette erreur, merci beaucoup pour la réponse, cependant. – Crownless