【发布时间】: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")
但是,为什么我必须手动操作呢?
我已经尝试了很多不同的安装方式:
到目前为止我做了什么:
从这里下载 cmocka:here。 1.0 版。
tar xvf cmocka-1.0.1.tar.xzcd cmocka-1.0.1、mkdir build和cd buildsudo cmake ..
我在这里收到这样的消息:
-- 配置完成
CMake 警告(开发):
策略 CMP0042 未设置:MACOSX_RPATH 默认启用。运行“cmake --help-policy CMP0042”以获取策略详细信息。使用 cmake_policy 命令设置策略并禁止显示此警告。
没有为以下目标指定 MACOSX_RPATH:
cmocka_shared
此警告适用于项目开发人员。使用 -Wno-dev 来抑制它。
问题 #1:如何设置 rpath 以使不会出现上述警告?
sudo
make须藤
make installcmocka现在应该安装了吧?
为使用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 库?
补充说明:
-
我试过跑步
$ export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
但它没有帮助。我猜这是 Linux 的解决方案,而不是 Mac。
我试图从他们的官方文档
cmake在 Mac 上了解有关RAPTH的一些信息:http://www.cmake.org/Wiki/CMake_RPATH_handling。但是我理解的很少,我无法为我的问题想出一个解决方案。我尝试使用
brew安装cmocka,但得到了相同的结果。-
此外,我在 SO 上阅读了很多关于
RPATH、链接和cmocka的问题,但我也找不到合适的解决方案。不过,这里是相关线程的列表: -
我已经运行
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