1

I just installed the zkcm library on my kubuntu machine and I'm having trouble compiling c++ code.

I have installed the gmp and mpfr libraries and checked that they work; the code

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

compiles and runs.

I then try to use zkcm; I try compliling the line

zkcm_matrix m;

and get a bunch of errors seemingly about zkcm not finding mpfr; here is the beginning of the output:

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

I have tried to follow the instructions infrom zkcm; I have the lines

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

and I compile the code (called test.cpp) using

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

Any ideas?

4

1 に答える 1

1

ライブラリの順序が正しくありません: エラー メッセージによると、zkcm は MPFR を使用するため、これを-lzkcm前に配置する-lmpfr必要があります (MPFR は GMP を使用するため、これ自体を前に配置する必要があります-lgmp)。

そうしないと、次のことが起こります: リンカが (または何らかの依存関係で) 使用されていない MPFR シンボルを検出するtest.cppと、それを削除します。そのようなシンボルが zkcm で使用されている場合-lzkcm、コマンド ラインの後半にあるため、エラーが発生します。これは、一部の MPFR シンボルでエラーが発生し、他のシンボルでエラーが発生しない理由も説明しています (test.cppコードと zkcm コードが変更されると、エラーが発生したり消えたりする場合があります)。

ここで問題を解決するには、これで十分なはずです。ただし、より一般的なルールについては、「リンカーの順序 - GCC」に対するこの回答を参照してください (この回答は循環依存関係も扱います)。

于 2015-01-15T09:23:44.990 に答える