2016-09-19 6 views
1

私はlibcheckを使用して簡単な例を構築しようとしていますが、pkg-configによって報告されたフラグを使用してビルドに失敗しています。libcheck testがリンクに失敗しました

マイファイル:テスト/ 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-config設定によって報告されたフラグと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

コンパイルコマンドの後にpkg-configによって報告されたフラグをこのanswerとして追加し、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

関連する問題