zkcm-library 找不到 mpfr-library
zkcm-library not finding the mpfr-library
我刚刚在我的 kubuntu 机器上安装了 zkcm library,但我在编译 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
有什么想法吗?
库顺序不正确:根据报错,zkcm使用MPFR,所以-lzkcm
应该放在-lmpfr
之前(本身应该放在-lgmp
之前,因为MPFR 使用 GMP)。
否则会发生以下情况:如果链接器发现 test.cpp
(或某些依赖项)未使用的 MPFR 符号,它将丢弃它。如果 zkcm 使用这样的符号,这将产生错误,因为 -lzkcm
出现在命令行的后面。这也解释了为什么某些 MPFR 符号可能会出错,而其他符号则不会(当 test.cpp
代码和 zkcm 代码更改时,错误可能会出现和消失)。
这应该足以解决这里的问题。但是请查看 this answer to "Linker order - GCC" 以了解更通用的规则(此答案还涉及循环依赖性)。
我刚刚在我的 kubuntu 机器上安装了 zkcm library,但我在编译 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
有什么想法吗?
库顺序不正确:根据报错,zkcm使用MPFR,所以-lzkcm
应该放在-lmpfr
之前(本身应该放在-lgmp
之前,因为MPFR 使用 GMP)。
否则会发生以下情况:如果链接器发现 test.cpp
(或某些依赖项)未使用的 MPFR 符号,它将丢弃它。如果 zkcm 使用这样的符号,这将产生错误,因为 -lzkcm
出现在命令行的后面。这也解释了为什么某些 MPFR 符号可能会出错,而其他符号则不会(当 test.cpp
代码和 zkcm 代码更改时,错误可能会出现和消失)。
这应该足以解决这里的问题。但是请查看 this answer to "Linker order - GCC" 以了解更通用的规则(此答案还涉及循环依赖性)。