我刚刚在我的kubuntu机器上安装了zkcm library,但是在编译c++代码时遇到了麻烦。

我已经安装了gmpmpfr库,并检查它们是否起作用;编码

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

编译并运行。

然后,我尝试使用zkcm;我尝试顺应这条线
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'

我尝试按照zkcm中的说明进行操作;我有线
#include "mpfr.h"
#include "zkcm.hpp"

然后使用以下命令编译代码(称为test.cpp)
g++ test.cpp -msse2 -std=c++11 -O2 -lm -lmpfr -lgmp -lgmpxx -lzkcm -o test

有任何想法吗?

最佳答案

库顺序不正确:根据错误消息,zkcm使用MPFR,因此-lzkcm应该放在-lmpfr之前(由于MPFR使用GMP,它本身应该放在-lgmp之前)。

否则,将发生以下情况:如果链接器发现test.cpp(或某些依赖项)未使用的MPFR符号,它将删除它。而且,如果zkcm使用了这样的符号,则会产生错误,因为-lzkcm在命令行中稍后出现。这也解释了为什么某些MPFR符号可能会出错,而其他MPFR符号却不会(在test.cpp代码和zkcm代码更改时,错误可能会出现并消失)。

这应该足以解决这里的问题。但是,请查看this answer to "Linker order - GCC"以了解更通用的规则(此答案还涉及循环依赖性)。

关于c++ - zkcm-library找不到mpfr-library,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27948383/

10-12 16:09