我正在用C编写一个项目的单元测试,使用Throw The Switch's Ceedling/Unity/CMock组合作为单元测试框架。
我遇到了一个有趣的难题,在我的一个单元测试中使用了mqueue.h。当测试编译时,我得到gcc链接器未定义的引用错误,例如mq_open()mq_close(),等等。。
据我所知,based on this finding在列出源代码(和可执行文件)之后,-lrt标志需要放在gcc命令的末尾gcc test_foo.c -lrt。不幸的是,ceedling被编写为将标志放在命令后面:gcc -lrt test_foo.c,我找不到更改顺序的方法。
Ceedling提供的文档只涉及如何向gcc命令添加标志,而不涉及如何更改顺序。我试过在Ceedling的大量源代码中查找,但它是用Ruby编写的,我对此并不熟悉。
所以我的问题是:
-lrt的位置是否真正影响mq_*()
关于如何改变轻轨旗帜的位置有什么想法吗?

最佳答案

差不多3年后也有类似的问题。他们已经在https://github.com/ThrowTheSwitch/Ceedling/issues/136中添加了此功能,但是从文档中仍然不容易理解其用法。我需要包含数学库(在命令末尾需要'-lm'标志),最后得到以下配置部分(特别是系统部分):

:libraries:
    :placement: :end
        :flag: "${1} "  # or "-L ${1}" for example
        :common: &common_libraries []
    :system:
         - -lm
    :test:
        - *common_libraries
    :release:
        - *common_libraries

出于某种原因,ceedling在添加到commons或特定构建节时根本没有添加标志。

10-06 06:49