我刚刚在我的kubuntu机器上安装了zkcm库,我在编译c++代码时遇到了困难。
我已经安装了gmp和mpfr库,并检查它们是否工作;代码
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有什么想法吗?
发布于 2015-01-15 09:23:44
库顺序是不正确的:根据错误消息,zkcm使用MPFR,因此-lzkcm应该放在-lmpfr之前(这本身应该放在-lgmp之前,因为MPFR使用-lgmp)。
否则会发生以下情况:如果链接器创建了test.cpp (或某些依赖项)未使用的MPFR符号,它将删除它。如果zkcm使用这样的符号,这将产生一个错误,因为-lzkcm稍后会出现在命令行中。这也解释了为什么您可能会得到一些MPFR符号而不是其他符号的错误(当test.cpp代码和zkcm代码更改时,错误可能会出现并消失)。
这应该足以解决这里的问题。但是,看看对“链接者命令- GCC”的回答获得更多的一般规则(这个答案还涉及循环依赖关系)。
https://stackoverflow.com/questions/27948383
复制相似问题