Я только что установил библиотека zkcm на моей машине kubuntu, и у меня возникают проблемы при компиляции кода 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).
В противном случае происходит следующее: если компоновщик находит символ MPFR, который не используется test.cpp
(или некоторая зависимость), это отбросит это. И если zkcm использует такой символ, это приведет к ошибке, так как -lzkcm
приходит позже в командной строке. Это также объясняет, почему вы можете получить ошибки для некоторых символов MPFR, а не для других (и ошибки могут появляться и исчезать, когда test.cpp
код и изменение кода zkcm).
Этого должно быть достаточно для решения проблемы здесь. Но посмотрите на этот ответ на «Linker order — GCC» для более общих правил (этот ответ также касается циклических зависимостей).