【问题标题】:How to handle problems with RPATH on Mac OS X while installing cmocka?安装 cmocka 时如何处理 Mac OS X 上的 RPATH 问题?
【发布时间】:2015-06-07 18:37:36
【问题描述】:

我正在尝试在 Mac OSX Yosemite 10.10.3 上安装和运行 cmocka 库以进行单元测试,但 RPATH 设置存在一些问题。

更新:

感谢@baf,我能够像这样在我的 CMakeLists.txt 中手动包含cmocka.h:

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

但是,为什么我必须手动操作呢?


我已经尝试了很多不同的安装方式:

到目前为止我做了什么:

  1. 从这里下载 cmocka:here。 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. sudo make

  2. 须藤make install

  3. cmocka 现在应该安装了吧?


为使用cmocka 库的程序运行cmake。

所以现在我为我的程序运行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. 我试图从他们的官方文档cmake 在 Mac 上了解有关 RAPTH 的一些信息:http://www.cmake.org/Wiki/CMake_RPATH_handling。但是我理解的很少,我无法为我的问题想出一个解决方案。

  2. 我尝试使用brew 安装cmocka,但得到了相同的结果。

  3. 此外,我在 SO 上阅读了很多关于 RPATH、链接和 cmocka 的问题,但我也找不到合适的解决方案。不过,这里是相关线程的列表:

  4. 我已经运行otool -L cmocka。这是我得到的:

    error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool: can't open file: cmocka (No such file or directory)
    

【问题讨论】:

  • 错误信息不是关于缺少库,而是缺少文件。标头 cmocka.h 不在编译器的包含路径中。尝试将-I/path/to/the/header 添加到编译器选项中。
  • @baf。我在/usr/local/include/cmocka.h 中找到了cmocka.h。我为我的调试版本设置了这样的标志:set(CMAKE_C_FLAGS_DEBUG "-std=gnu99 -Wall -pedantic -g -I/usr/local/include/cmocka.h")。但是,在运行make 时仍然找不到cmocka.h。我做错了什么?
  • 指定标头位置:-I/usr/local/include
  • 现在可以使用了。谢谢@bef。不过,我很好奇,为什么我必须使用-I/usr/local/include 来包含它……它应该自动定位 cmocka 吗? RPATH在这里的作用是什么?
  • 看来/usr/local/include 目录不在编译器的包含搜索路径中。 Rpath 如果安装在非标准位置,可能有助于查找库,但不是标题。

标签: c macos cmake rpath cmocka


【解决方案1】:

当我将-I/usr/local/include 标志添加到我的调试标志时,我能够成功编译我的程序(感谢 baf):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多