Как решить проблемы с RPATH в Mac OS X при установке cmocka?

Я пытаюсь установить и запустить библиотеку cmocka для модульного тестирования в Mac OSX Yosemite 10.10.3, но у меня возникли проблемы с настройками RPATH.

Обновлять:

Благодаря @baf я смог вручную включить cmocka.h в свой CMakeLists.txt следующим образом:

set(CMAKE_C_FLAGS_DEBUG "-I/usr/local/include/cmocka.h")

Однако почему мне приходится делать это вручную?


Я уже пробовал много разных способов установки:

Что я сделал до сих пор:

  1. Загрузите cmocka отсюда: здесь. Версия 1.0.

  2. tar xvf cmocka-1.0.1.tar.xz

  3. cd cmocka-1.0.1, mkdir build и cd build

  4. sudo cmake ..
    Я получаю вот такое сообщение:

-- Настройка выполнена

Предупреждение CMake (разработчик):

Политика CMP0042 не задана: MACOSX_RPATH включен по умолчанию. Запустите «cmake --help-policy CMP0042», чтобы узнать подробности политики. Используйте команду cmake_policy, чтобы установить политику и отключить это предупреждение.

MACOSX_RPATH не указан для следующих целей:

cmocka_shared

Это предупреждение для разработчиков проекта. Используйте -Wno-dev, чтобы подавить его.

Вопрос № 1: Как настроить rpath, чтобы не было предупреждения, подобного приведенному выше?

  1. судо make

  2. судо make install

  3. cmocka должен быть установлен сейчас, верно?


Запуск cmake для моей программы, использующей библиотеку cmocka.

Итак, теперь я запускаю cmake для своей программы, и мой основной файл CMakeList.txt содержит такие строки:

find_library (CMOCKA cmocka)
if (NOT CMOCKA)
    message (WARNING "Cmocka library not found.")
endif (NOT CMOCKA)

Но на этом этапе предупреждение не появляется, поэтому я считаю, что find_libarary(CMOCKA cmocka) успешно обнаружил cmocka на моем компьютере.

Запуск make для моей программы.

При запуске make я получаю такую ​​ошибку:

fatal error:<br>
    'cmocka.h' file not found<br>
#include <cmocka.h>
          ^
1 error generated.

Так что я предполагаю, что cmocka не может быть найден...

Вопрос №2: Почему не удается найти библиотеку cmocka?


Дополнительные замечания:

  1. я пробовал бегать

    $ export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
    

но это не помогло. Я думаю, это решение для Linux, а не для Mac.

  1. Я пытался узнать кое-что о RAPTH на Mac в cmake из их официальной документации здесь: http://www.cmake.org/Wiki/CMake_RPATH_handling. Однако я очень мало понял и не смог найти решение своей проблемы.

  2. Я пытался установить cmocka с помощью brew, но результат тот же.

  3. Кроме того, я прочитал много вопросов в SO о RPATH, ссылках и cmocka, но также не нашел подходящего решения. Тем не менее, вот список связанных тем:

  4. #P30# <блочная цитата>
    error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool: can't open file: cmocka (No such file or directory)
    

person Mateusz Piotrowski    schedule 07.06.2015    source источник
comment
Сообщение об ошибке не об отсутствующей библиотеке, а об отсутствующем файле. Заголовок cmocka.h не входит в путь включения компилятора. Попробуйте добавить -I/path/to/the/header в параметры компилятора.   -  person baf    schedule 07.06.2015
comment
@баф. Я нашел cmocka.h в /usr/local/include/cmocka.h. Я установил такие флаги для своей отладочной сборки: set(CMAKE_C_FLAGS_DEBUG "-std=gnu99 -Wall -pedantic -g -I/usr/local/include/cmocka.h"). Однако при запуске make cmocka.h все еще не найдено. Что я делаю неправильно?   -  person Mateusz Piotrowski    schedule 07.06.2015
comment
Укажите расположение заголовка: -I/usr/local/include   -  person baf    schedule 07.06.2015
comment
Теперь это работает. Спасибо @bef. Тем не менее, мне очень любопытно, почему я должен включать его с помощью -I/usr/local/include... Должен ли он автоматически находить cmocka? Какова роль RPATH здесь?   -  person Mateusz Piotrowski    schedule 07.06.2015
comment
Кажется, каталог /usr/local/include не входит в путь поиска вашего компилятора. Rpath может помочь найти библиотеки, если они установлены в нестандартном месте, но не заголовки.   -  person baf    schedule 07.06.2015
comment
Итак, RPATH не имеет ничего общего с вопросом № 2? (это объясняет, почему cmake был успешным) Значит, с моими настройками RPATH все в порядке, верно? Проблема заключается в том, что компилятору сложно найти правильные заголовки, я прав? Если да, то что я должен искать, чтобы узнать об этом и исправить? Спасибо!   -  person Mateusz Piotrowski    schedule 07.06.2015


Ответы (1)


Я смог успешно скомпилировать свою программу (благодаря baf), когда добавил флаг -I/usr/local/include к своим флагам отладки:

set(CMAKE_C_FLAGS_DEBUG "-std=gnu99 -Wall -pedantic -g -I/usr/local/include/cmocka.h")
person Mateusz Piotrowski    schedule 31.08.2016