2016-09-19 7 views
1

libcheck을 사용하여 간단한 예제를 작성하려고하지만 pkg-config가보고하는 플래그를 사용하는 동안 빌드가 실패합니다.libcheck 테스트가 연결되지 않습니다

내 파일을 테스트/TEST.C

#include <stdlib.h> 
#include <check.h> 

START_TEST(zero) 
{ 
     int z = 0; 
     ck_assert_int_eq(0, z); 
} 
END_TEST 

Suite* suite_zero(void) 
{ 
    Suite* s; 
    TCase* tc; 
    s = suite_create("suite_zero"); 
    tc = tcase_create("zero"); 
    tcase_add_test(tc, zero); 

    suite_add_tcase(s, tc); 
    return s; 
} 

int main(void) 
{ 
    int number_failed; 
    SRunner* sr; 

    Suite* s_zero = suite_zero(); 

    sr = srunner_create(s_zero); 

    srunner_run_all(sr, CK_NORMAL); 
    number_failed = srunner_ntests_failed(sr); 
    srunner_free(sr); 
    return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE; 
} 

내 시스템 :

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu 
DISTRIB_RELEASE=16.04 
DISTRIB_CODENAME=xenial 
DISTRIB_DESCRIPTION="Ubuntu 16.04 LTS" 
$ gcc --version 
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.2) 5.4.0 20160609 

$ pkg-config --version 
0.29.1 

내가 PKG-설정에 의해보고 된 플래그와 libs와 사용하여 내 테스트를 빌드하려고 :

$ pkg-config --cflags --libs check 
-pthread -lcheck_pic -pthread -lrt -lm -lsubunit 
$ gcc -pthread -lcheck_pic -pthread -lrt -lm -lsubunit -g tests/test.c -o tests/zero 
/tmp/ccRV2kLw.o: In function `zero': 
Code/tests/test.c:4: undefined reference to `tcase_fn_start' 
/Code/tests/test.c:7: undefined reference to `_mark_point' 
/Code/tests/test.c:7: undefined reference to `_ck_assert_failed' 
/tmp/ccRV2kLw.o: In function `suite_zero': 
/Code/tests/test.c:15: undefined reference to `suite_create' 
/Code/tests/test.c:16: undefined reference to `tcase_create' 
/Code/tests/test.c:17: undefined reference to `_tcase_add_test' 
/Code/tests/test.c:19: undefined reference to `suite_add_tcase' 
/tmp/ccRV2kLw.o: In function `main': 
/Code/tests/test.c:30: undefined reference to `srunner_create' 
/Code/tests/test.c:32: undefined reference to `srunner_run_all' 
/Code/tests/test.c:33: undefined reference to `srunner_ntests_failed' 
/Code/tests/test.c:34: undefined reference to `srunner_free' 
collect2: error: ld returned 1 exit status 

libcheck는 apt에 의해 설치되었으며 라이브러리와 헤더는 일반적인 위치 인/usr/lib와/usr/include에 각각 있습니다. 그러나 그것이 발견되지 않는 것으로 보인다. 나는 왜 그다지 왜곡되지 않는다. 어떤 아이디어?

감사합니다.

+0

도서관은 지난 온다. –

답변

1

컴파일 명령 다음에 answer으로 pkg-config에서보고 된 플래그를 추가하고 pkg-config에 대한 설명서에서 제안하는 내용을 추가하십시오. 컴파일러는 어떤 파일을 라이브러리를 에 미리 연결하려고 시도하는지 알 필요가 있으므로 플래그를 적절하게 적용 할 수 있도록입니다. 특히 당신이 실행 파일을 만들기 위해 컴파일하고 오브젝트 파일 (또는 소스 파일) 후 -

gcc -g test.c -o test -pthread -lcheck_pic -pthread -lrt -lm -lsubunit 

또는 더 간결

gcc -g test.c -o test `pkg-config --cflags --libs check` 
+1

나는 명령이 중요하다는 것을 결코 알지 못했다. 나는 gcc가이 모든 내용을 읽고 무엇을해야할지 알아낼 수있을 거라고 생각했다. 고맙습니다. – dangeroushobo

관련 문제