Настройка обработки запросов с помощью mqueue.h и -lrt

#c #ruby #unit-testing #gcc #mqueue

#c #ruby #модульное тестирование #gcc #mqueue

Вопрос:

Я пишу модульные тесты для проекта на C, используя комбинацию Ceedling / Unity / CMock коммутатора в качестве среды модульного тестирования.

Я столкнулся с интересной дилеммой, которую я использую mqueue.h в одном из своих модульных тестов. Когда тесты компилируются, я получаю неопределенные ссылочные ошибки компоновщика gcc для mq_open() mq_close() , и т.д..

Насколько я понимаю, исходя из этого, флаг -lrt должен указываться в конце команды gcc — после перечисления источников (и исполняемых файлов?) gcc test_foo.c -lrt . К сожалению, ceedling написан для установки флага сразу после команды: gcc -lrt test_foo.c , и я не могу найти способ изменить порядок.

Документация, поставляемая с Ceedling, описывает только то, как добавлять флаги в команду gcc, а не как изменять порядок. Я пытался покопаться в обширном исходном коде Ceedling, но он написан на Ruby, с которым я не знаком.

Итак, мои вопросы:

  1. Действительно ли размещение -lrt влияет на связывание mq_*()
  2. Есть мысли о том, как изменить размещение флага -lrt?

Ответ №1:

Почти 3 года спустя возникла аналогичная проблема. Они добавили эту функцию в https://github.com/ThrowTheSwitch/Ceedling/issues/136 , но использование по-прежнему нелегко понять из документации. Мне нужно было включить математическую библиотеку (требуется флаг ‘-lm’ в конце команды) и в итоге получился следующий раздел конфигурации (особенно системная часть):

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

По какой-то причине ceedling вообще не добавлял флаги при добавлении в commons или отдельные разделы сборки.