2015-01-14 1 views
1

방금 ​​내 쿠분투 컴퓨터에 zkcm library을 설치했고 C++ 코드를 컴파일하는 데 문제가 있습니다.zkcm-library가 mpfr-library를 찾지 못했습니다.

gmpmpfr 라이브러리를 설치하고 작동하는지 확인했습니다. 코드

mpfr_t m1, m2, m3; 
mpfr_init(m1); mpfr_init(m2); mpfr_init(m3); 
mpfr_mul(m1, m2, m3, MPFR_RNDN); 

컴파일 및 실행.

그런 다음 zkcm을 사용해보십시오. 나는 겉으로에 대한 zkcmmpfr을 찾지 못하는 줄

zkcm_matrix m; 

을 compliling 오류의 무리를 해보; 여기에 출력의 시작입니다 : 내가 지시가 zkcm를 infrom 따라 시도

/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' 

는; 나는 선

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

을하고 난

g++ test.cpp -msse2 -std=c++11 -O2 -lm -lmpfr -lgmp -lgmpxx -lzkcm -o test 

어떤 아이디어를 사용하여 (test.cpp이라고 함) 코드를 컴파일?

+1

라이브러리 이름을 컴파일러로 전달하는 순서를 변경해 보셨습니까? – Cameron

+0

나는 결과가없는 지금 조금 해봤 다. 어떤 특정한 순서를 염두에두고 있나? 차라리 모든 것을 시도하지 않을 것입니다. :). OP의 순서는 zkcm README의 순서입니다. – jorgen

+1

하나의 라이브러리의 종속 라이브러리가 라이브러리 자체와 관련하여 잘못된 순서로 배치되면 (즉, 테스트 할 두 개의 주문 만) 일이 연결되지 않는 것을 보았습니다. 그러나 이번에는 그렇지 않은 것으로 보인다. – Cameron

답변

1

라이브러리 순서가 올바르지 않습니다 -lzkcm가 (MPFR가 GMP를 사용하기 때문에 그 자체가 -lgmp 전에 넣어되어야하는) -lmpfr 전에 넣어되어야하도록 에러 메시지에 따라 zkcm가 MPFR를 이용한다.

그렇지 않으면 다음과 같이됩니다. 링커가 test.cpp (또는 일부 종속성)에서 사용하지 않는 MPFR 심볼을 발견하면 제거됩니다. 그리고 그러한 기호가 zkcm에 의해 사용되면, 나중에 명령 행에 -lzkcm이 오기 때문에 오류가 발생합니다. 이것은 또한 다른 MPFR 기호가 아닌 일부 MPFR 기호에 대해 오류가 발생할 수있는 이유를 설명합니다. test.cpp 코드와 zkcm 코드가 변경되면 오류가 나타나고 사라질 수 있습니다.

여기에서 문제를 해결하려면 충분해야합니다. 그러나 좀 더 일반적인 규칙에 대해서는 this answer to "Linker order - GCC"을보십시오 (이 대답은 주기적 종속성도 다룹니다).

+0

정말 고마워요! 웬일인지 나는 주문 논리가 정반대라고 생각하고 있었다. – jorgen

관련 문제