我正在用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或特定构建节时根本没有添加标志。