2016-03-15 1 views
0

Comment ajouter GMP à ma bibliothèque statique?Ajout de GMP à sa propre bibliothèque

En malib.h je

#include<gmp.h> 
#include<gmpxx.h> 

et certaines fonctions comme:

void fun(mpz_t &a, mpz_t b){ 
    mpz_add(a,a,b); 
} 

Ma bibliothèque statique J'ai créé par

gcc -std-c++11 -c mbib.c -o mbib.o 
ar rcs libmbib.a  mbib.o 

Je mbib.o liés et quand je n'utilise pas de fonctions à partir de là ça marche. Mais quand je suis en train d'utiliser l'un d'eux j'ai:

/home/MBIB/libmbib.a(mbib.o):-1: In function `__gmp_binary_plus::eval(__mpz_struct*, __mpz_struct const*, __mpz_struct const*)': 
mbib.cpp:-1: error: undefined reference to `__gmpz_add' 
/home/MBIB/libmbib.a(mbib.o):-1: In function `__gmp_binary_multiplies::eval(__mpz_struct*, __mpz_struct const*, long)': 
mbib.cpp:-1: error: undefined reference to `__gmpz_mul_si' 

J'ai essayé d'ajouter

LIBS += -L[path] -lgmp -lgmpxx 

mais cela ne fonctionne pas.

Répondre

1

C'est simple: vous ne pouvez pas. Vous ne pouvez pas parce que vous ne "liez" pas avec d'autres bibliothèques lorsque vous créez une bibliothèque statique, une bibliothèque statique n'est rien de plus qu'une archive collectant des fichiers objets, vous n'utilisez pas réellement un éditeur de liens pour créer un bibliothèque statique. La commande ar et le suffixe du nom de fichier .a signifient "archive".

Si vous avez une bibliothèque statique qui dépend d'une autre bibliothèque statique, vous devez également créer avec l'autre bibliothèque pour l'exécutable final (ou la bibliothèque dynamique).

+1

Pour être juste, vous pouvez. Comme vous le dites, le .a est juste une archive, et vous pouvez prendre 2 archives et les fusionner en un seul ... –