zkcm-библиотека не нашла mpfr-библиотеку

Я только что установил библиотека 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

Есть идеи?

1

Решение

Порядок библиотек неверен: согласно сообщению об ошибке, zkcm использует MPFR, так что -lzkcm следует поставить перед -lmpfr (который сам должен быть поставлен перед -lgmp потому что MPFR использует GMP).

В противном случае происходит следующее: если компоновщик находит символ MPFR, который не используется test.cpp (или некоторая зависимость), это отбросит это. И если zkcm использует такой символ, это приведет к ошибке, так как -lzkcm приходит позже в командной строке. Это также объясняет, почему вы можете получить ошибки для некоторых символов MPFR, а не для других (и ошибки могут появляться и исчезать, когда test.cpp код и изменение кода zkcm).

Этого должно быть достаточно для решения проблемы здесь. Но посмотрите на этот ответ на «Linker order — GCC» для более общих правил (этот ответ также касается циклических зависимостей).

1

Другие решения


По вопросам рекламы [email protected]