首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何与cmocka联系?

我如何与cmocka联系?
EN

Stack Overflow用户
提问于 2015-10-21 13:42:10
回答 1查看 6K关注 0票数 1

我在Ubuntu下使用Eclipse。

我刚安装了cmocka:

代码语言:javascript
复制
Install the project...
-- Install configuration: "Debug"
-- Installing: /usr/lib/pkgconfig/cmocka.pc
-- Installing: /usr/lib/cmake/cmocka/cmocka-config.cmake
-- Installing: /usr/lib/cmake/cmocka/cmocka-config-version.cmake
-- Installing: /usr/include/cmocka.h
-- Installing: /usr/include/cmocka_pbc.h
-- Installing: /usr/lib/libcmocka.so.0.3.1
-- Installing: /usr/lib/libcmocka.so.0
-- Installing: /usr/lib/libcmocka.so

当我构建一个简单的测试项目时,我会得到链接器错误。从这个代码

代码语言:javascript
复制
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>

#include "factorial.h"

static void test_factorial_zeo()
{
    assert_int_equal(factorial(0), 1);
}

int main(int argc, char **argv)
{
    const UnitTest tests[] =
    {
            unit_test(test_factorial_zeo),
    };

    return run_tests(tests);
}

我知道这些错误:

代码语言:javascript
复制
make all 
Building target: unit_test_C_code_example_project
Invoking: GCC C Linker
gcc  -o "unit_test_C_code_example_project"  ./test_scripts/test_factorial.o  ./software_under_test/factorial.o   
./test_scripts/test_factorial.o: In function `test_factorial_zeo':
/home/me/workspace/unit_test_C_code_example_project/Debug/../test_scripts/test_factorial.c:10: undefined reference to `_assert_int_equal'
./test_scripts/test_factorial.o: In function `main':
/home/me/workspace/unit_test_C_code_example_project/Debug/../test_scripts/test_factorial.c:20: undefined reference to `_run_tests'
collect2: ld returned 1 exit status
make: *** [unit_test_C_code_example_project] Error 1

**** Build Finished ****

因此,我似乎应该将cmocka库添加到链接器路径中。但后来我得到了

代码语言:javascript
复制
make all 
Building target: unit_test_C_code_example_project
Invoking: GCC C Linker
gcc  -o "unit_test_C_code_example_project"  ./test_scripts/test_factorial.o  ./software_under_test/factorial.o   -llibcmocka.so.0.3.1
/usr/bin/ld: cannot find -llibcmocka.so.0.3.1
collect2: ld returned 1 exit status
make: *** [unit_test_C_code_example_project] Error 1

**** Build Finished ****

我得到了与libcmocka.so.0.3.1、libcmocka.so.0和libcmocka.so相同的结果。

显然,我做了一些非常基本的错误,但又是什么呢?

代码语言:javascript
复制
ls -lAF /usr/lib/libcmocka.so*
lrwxrwxrwx 1 root root    14 Oct 21 15:03 /usr/lib/libcmocka.so -> libcmocka.so.0*
lrwxrwxrwx 1 root root    18 Oct 21 15:03 /usr/lib/libcmocka.so.0 -> libcmocka.so.0.3.1*
-rwxrwxrwx 1 root root 77216 Oct 21 15:02 /usr/lib/libcmocka.so.0.3.1*
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-22 06:54:52

好的,我找到了答案这里,并将引用它:

-L选项的工作方式类似于库的搜索路径,就像shell中的$PATH是可执行文件的搜索路径一样。 就像shell有默认搜索路径一样,链接器也有默认库搜索路径,其中应该包含/usr/lib。因此,您甚至不需要使用-L/usr/lib选项。这对您不起作用的原因是您使用了带有-l选项的完整路径。 通常使用-l选项将“扩展名”从文件名以及lib前缀和目录中删除。

因此,在我的例子中,我告诉Eclipse使用cmocka链接,这导致使用以下命令生成makefile

代码语言:javascript
复制
gcc -L/usr/lib -o "unit_test_C_code_example_project"  ./test_scripts/test_factorial.o  ./software_under_test/factorial.o   -lcmocka

连接成功。

当然,我知道这一点,但我已经忘记了。哦哦!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33260973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档