2010-02-21 6 views
1

Je suis nouveau sur g ++ et Makefile. J'essaye de lier cette bibliothèque de BeBOP SMC, qui est dans mon répertoire lib. Sous le répertoire lib sont bebop_util et sparse_matrix_converter, les deux ont déjà été construits sans erreurs. Je vois libbebop_util.a, libbebop_util.so sous bebop_util et libsparse_matrix_converter.a, libsparse_matrix_converter.so sous sparse_matrix_converter. Ci-dessous la source:Référence indéfinie résultant de la liaison g ++

Makefile

CC=g++ 
CFLAGS=-c -Wall 

test.out: test.o 
    $(CC) -o test.out -Ilib/sparse_matrix_converter/include -Llib/bebop_util \ 
-Llib/sparse_matrix_converter -lbebop_util -lsparse_matrix_converter test.o 

test.o: test.cpp 
    $(CC) $(CFLAGS) -Ilib/sparse_matrix_converter/include test.cpp 

clean: 
    rm -f test.o test.out 

test.cpp

#include <bebop/smc/sparse_matrix.h> 
#include <bebop/smc/sparse_matrix_ops.h> 

int main(int argc, const char* argv[]) 
{ 
    struct sparse_matrix_t* A = load_sparse_matrix (MATRIX_MARKET, "sample_input"); 
    destroy_sparse_matrix(A); 
    return 0; 
} 


Sortie:

login3% make 
g++ -c -Wall -Ilib/sparse_matrix_converter/include test.cpp 
g++ -o test.out -Ilib/sparse_matrix_converter/include -Llib/bebop_util -Llib/sparse_matrix_converter -lbebop_util -lsparse_matrix_converter test.o 
test.o: In function `main': 
test.cpp:(.text+0x1a): undefined reference to `load_sparse_matrix(sparse_matrix_file_format_t, char const*)' 
test.cpp:(.text+0x27): undefined reference to `destroy_sparse_matrix(sparse_matrix_t*)' 
collect2: ld returned 1 exit status 
make: *** [test.out] Error 1 

Veuillez noter que test.cpp dépend de sparse_matrix_converter, qui dépend de bebop_util. Voulez-vous s'il vous plaît me faire savoir quelles erreurs j'ai pu faire? Merci.

Tom

+0

vous liez contre -lsparse_matrix_converter -lbebop_util, ces deux noms ne ressemblent pas qu'ils seraient grandes bibliothèques. Êtes-vous sûr de tout avoir lié? –

+0

Merci pour le commentaire. Je pense que j'ai lié à tout. sparse_matrix_converter est la bibliothèque principale. La bibliothèque s'appelle BeBOP SMC. SMC est l'abréviation de «matrix matrix converter». –

Répondre

3

Le code Bebop semble être le code C, mais n'a pas ajouter les gardes C++ correcte. Votre inclut avec Surround extern "C" pour résoudre ce problème:

extern "C" { 
#include <bebop/smc/sparse_matrix.h> 
#include <bebop/smc/sparse_matrix_ops.h> 
} 
+0

Merci. Les erreurs de compilation ont disparu avec l'ajout d'extern C. Cependant, j'ai eu une nouvelle erreur: ./test.out: erreur lors du chargement des librairies partagées: libbebop_util.so: impossible d'ouvrir le fichier objet partagé: Pas de tel fichier ou répertoire –

+0

J'ai fait Assurez-vous que l'autorisation n'est pas le problème via chmod 777 pour libbebop_util.so. –

+0

Je vais juste accepter la réponse, car le nouveau problème semble différent. Je posterai le nouveau problème. –

Questions connexes