1

我正在使用Throw The Switch 的 Ceedling /Unity/CMock 组合作为单元测试框架为 C 语言项目编写单元测试。

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

据我了解,基于此发现, -lrt 标志需要放在 gcc 命令的末尾 - 在列出源(和可执行文件?)之后gcc test_foo.c -lrt。不幸的是, ceedling 被写在 command: 之后放置标志gcc -lrt test_foo.c,我找不到改变顺序的方法。

Ceedling 提供的文档仅涉及如何向 gcc 命令添加标志,而不是如何更改顺序。我试过在 Ceedling 的大量源代码中四处寻找,但它是用我不熟悉的 Ruby 编写的。

所以我的问题是:

  1. -lrt 的放置是否真的影响 mq_*() 的链接
  2. 关于如何更改 -lrt 标志的位置的任何想法?
4

1 回答 1

0

差不多 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 根本没有添加标志。

于 2019-07-01T09:23:39.757 回答