2015-01-14 67 views
1

我剛剛在我的kubuntu機器上安裝了zkcm library,我無法編譯C++代碼。zkcm-library找不到mpfr-library

我已經安裝了gmpmpfr庫,並檢查它們是否工作;代碼

mpfr_t m1, m2, m3; 
mpfr_init(m1); mpfr_init(m2); mpfr_init(m3); 
mpfr_mul(m1, m2, m3, MPFR_RNDN); 

編譯並運行。

然後我嘗試使用zkcm;我嘗試compliling行

zkcm_matrix m; 

,並得到一堆錯誤貌似約zkcm沒有找到mpfr;這裏是輸出的開頭:

/usr/local/lib/libzkcm.a(zkcm_c.o): In function `zkcm_init_ri(zkcm*, double, double)': 
/home/jorgen/Downloads/zkcm_lib-0.4.0/srcs/zkcm_c.c:126: undefined reference to `mpfr_inits' 
/home/jorgen/Downloads/zkcm_lib-0.4.0/srcs/zkcm_c.c:127: undefined reference to `mpfr_set_d' 
/usr/local/lib/libzkcm.a(zkcm_c.o): In function `zkcm_init_ri_str(zkcm*, char const*, char const*)': 
/home/jorgen/Downloads/zkcm_lib-0.4.0/srcs/zkcm_c.c:132: undefined reference to `mpfr_inits' 
/home/jorgen/Downloads/zkcm_lib-0.4.0/srcs/zkcm_c.c:136: undefined reference to `mpfr_set_str' 
/home/jorgen/Downloads/zkcm_lib-0.4.0/srcs/zkcm_c.c:134: undefined reference to `mpfr_set_ui' 

我試圖按照指示infrom zkcm;我有線路

#include "mpfr.h" 
#include "zkcm.hpp" 

我編譯使用

g++ test.cpp -msse2 -std=c++11 -O2 -lm -lmpfr -lgmp -lgmpxx -lzkcm -o test 

任何想法的代碼(稱爲test.cpp)?

+1

您是否試過改變將庫名傳遞給編譯器的順序? – Cameron

+0

我現在試了一下,沒有結果..記住任何特定的順序?我寧願不嘗試所有120 :)。 OP中的順序是zkcm README中的順序。 – jorgen

+1

如果一個庫的依賴庫被放在相對於庫本身的錯誤順序中(如此,只需要兩個測試命令),我已經看到了鏈接失敗的情況。但這次似乎並非如此。 – Cameron

回答

1

庫命令不正確:根據錯誤消息,zkcm使用MPFR,因此-lzkcm應該放在-lmpfr之前(因爲MPFR使用GMP,它本身應放在-lgmp之前)。

否則,會發生以下情況:如果鏈接器找到一個未被test.cpp(或某個依賴項)使用的MPFR符號,它將放棄它。如果zkcm使用這樣的符號,則會在命令行中出現-lzkcm以後出現錯誤。這也解釋了爲什麼您可能會遇到某些MPFR符號而不是其他錯誤(並且當test.cpp代碼和zkcm代碼更改時,錯誤可能會出現並消失)。

這應該足以解決這裏的問題。但請查看this answer to "Linker order - GCC"瞭解更多一般規則(此答案也涉及循環依賴關係)。

+0

它的工作原理,非常感謝!出於某種原因,我認爲訂單邏輯是相反的。 – jorgen