使用mqueue.h和-lrt配置ceedling

时间:2016-09-30 19:40:14

标签: c ruby unit-testing gcc mqueue

我使用Throw The Switch's Ceedling / Unity / CMock combo作为单元测试框架,在C中编写项目的单元测试。

我遇到了一个有趣的困境,我在我的一个单元测试中使用mqueue.h。当测试编译时,我得到mq_open()mq_close()等的gcc链接器未定义的引用错误。

根据我的理解,based on this finding -lrt标志需要在gcc命令的末尾 - 在列出源(和可执行文件?)gcc test_foo.c -lrt之后。不幸的是,编写ceedling是为了在命令gcc -lrt test_foo.c之后立即放置标志,我无法找到改变顺序的方法。

Ceedling提供的文档仅介绍如何向gcc命令添加标志,而不是如何更改顺序。我曾尝试过使用Ceedling的庞大源代码,但它是用Ruby编写的,我对此并不熟悉。

所以我的问题是:

  1. -lrt的位置是否真正影响mq _ *()
  2. 的链接
  3. 有关如何更改-lrt标志位置的任何想法?

1 个答案:

答案 0 :(得分:0)

近3年后,出现了类似的问题。他们在https://github.com/ThrowTheSwitch/Ceedling/issues/136中添加了此功能,但是从文档中仍然很难理解其用法。我需要包括数学库(命令末尾需要'-lm'标志),并以以下配置节(特别是 system 部分)结束:

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

出于某种原因,ceedle在添加到commons或特定的build部分时根本没有添加标记。