2010-08-24 17 views
0

je suis nouveau au Cabinet tokyo et je l'ai installé et j'ai exécuter le programme exemple c J'obtiens l'erreur ... alors que je compilez avec gccproblème de compilation dans le programme tokyo cabinate C

gcc -O tcadbex.c 

/tmp/cc7IEOht.o: In function `main': 
tcadbex.c:(.text+0xd): undefined reference to `tcadbnew' 
tcadbex.c:(.text+0x1f): undefined reference to `tcadbopen' 
tcadbex.c:(.text+0x58): undefined reference to `tcadbput2' 
tcadbex.c:(.text+0x74): undefined reference to `tcadbput2' 
tcadbex.c:(.text+0x90): undefined reference to `tcadbput2' 
tcadbex.c:(.text+0xc1): undefined reference to `tcadbget2' 
tcadbex.c:(.text+0x10e): undefined reference to `tcadbiterinit' 
tcadbex.c:(.text+0x11c): undefined reference to `tcadbget2' 
tcadbex.c:(.text+0x156): undefined reference to `tcadbiternext2' 
tcadbex.c:(.text+0x164): undefined reference to `tcadbclose' 
tcadbex.c:(.text+0x18d): undefined reference to `tcadbdel' 
collect2: ld returned 1 exit status 

peut Quelqu'un peut-il me dire quels sont les problèmes avec ce ...

Répondre

1

Oui, vous devrez certainement lier avec les fichiers de bibliothèque pour Tokyo Cabinate (quel qu'il soit).

En règle générale, vous pouvez utiliser une commande comme:

gcc -o tcadbex -L/usr/lib -lxyz tcadbex.c 

où:

  • -L spécifie les chemins de recherche pour les bibliothèques.
  • -l répertorie les bibliothèques pour rechercher des symboles non définis.

et l'éditeur de liens pour aller chercher les bibliothèques, suivant certaines règles pour transformer xyz en un nom de fichier comme libxyz.so.

En fait, une recherche du filet se transforme en this (sur une ligne, je vais partager juste pour la lisibilité):

gcc -I/usr/local/include tc_example.c -o tc_example 
    -L/usr/local/lib -ltokyocabinet -lz -lbz2 -lrt -lpthread -lm -lc 

comme la ligne de commande à utiliser.

donc je suggère que vous avez besoin pour votre cas (encore une fois, sur une seule ligne):

gcc -I/usr/local/include tcadbex.c -o tcadbex 
    -L/usr/local/lib -ltokyocabinet -lz -lbz2 -lrt -lpthread -lm -lc 
+0

i get cela si je lance le cmd ci-dessus ..mais mon java api fonctionne très bien ,,, mais j'en ai besoin en c /usr/bin/ld: ne peut pas trouver -ltcadb collect2: ld a retourné 1 statut de sortie – raj

+0

@raj, vérifiez la mise à jour, la bibliothèque a un nom différent de celui que j'ai utilisé comme exemple. – paxdiablo