zkcm-library找不到mpfr库

时间:2015-01-14 16:58:39

标签: c++ compiler-errors static-linking mpfr zkcm

我刚刚在我的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'

我试图按照inf zkcm的说明进行操作;我有线

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

我使用

编译代码(名为test.cpp
g++ test.cpp -msse2 -std=c++11 -O2 -lm -lmpfr -lgmp -lgmpxx -lzkcm -o test

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

否则会发生以下情况:如果链接器找到了-lzkcm未使用的MPFR符号(或某些依赖项),它将丢弃它。如果zkcm使用了这样的符号,则会产生错误,因为test.cpp稍后会出现在命令行中。这也解释了为什么你可能会得到一些MPFR符号而不是其他符号的错误(当{{1}}代码和zkcm代码改变时,错误可能会出现和消失。)

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