2016-03-15 103 views
0

如何將GMP添加到我的靜態庫中?將GMP添加到自己的庫中

在MyLib.h我

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

和一些功能,如:

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

我的靜態庫我已經

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

創建我有聯繫mbib.o和當我不使用它的功能。但是,當我試圖使用其中的任何我有:

/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' 

我曾嘗試添加

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

,但它不工作。

回答

1

很簡單:你不能。

當你創建一個靜態庫時,你不能「鏈接」其他庫,靜態庫只不過是一個收集對象文件的歸檔文件,實際上你並沒有使用鏈接器來創建一個靜態庫。命令ar和文件名後綴.a全部代表「存檔」。

如果您有一個靜態庫依賴於另一個靜態庫,那麼您需要爲其他庫創建最終可執行文件(或動態庫)。

+1

公平地說,你可以。正如你所說的,.a只是一個存檔,你可以把兩個檔案合併成一個... –

相關問題