libcheck测试无法链接

libcheck测试无法链接,c,gcc,C,Gcc,我正在尝试使用构建一个简单的示例,但在使用pkg config报告的标志时构建失败 我的文件:tests/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;

我正在尝试使用构建一个简单的示例,但在使用pkg config报告的标志时构建失败

我的文件:tests/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;
}
当我尝试使用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。但它似乎找不到。我有点不明白为什么。有什么想法吗


谢谢。

请尝试在编译命令之后添加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`

库排在最后,尤其是在编译以生成可执行文件的目标文件(或源文件)之后。我从来不知道顺序有多重要。我以为gcc会把它全部读进去,并且能够想出该怎么做。非常感谢。
gcc -g test.c -o test `pkg-config --cflags --libs check`