微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 自莫哈韦以来,链接不在自制软件的cmake中工作

我现在已经在两台计算机上重现了这个症状,自从我的机器升级到macOS后,cmake似乎不再查看/usr/local/lib(或者更正确的是,$(brew –prefix)/ lib)用于Homebrew提供的库莫哈韦沙漠.

虽然有办法绕过这个(例如使用EXECUTE_PROCESS搜索自制前缀;将结果添加到LINK_LIBRARIES(…)命令)没有一个是理想的. Mojave改变了什么来打破这种行为?

临时解决方法是将以下内容添加到CMakeLists.txt:

# WARNING: Don't hard-code this path
LINK_DIRECTORIES(/usr/local/lib)

我已经尝试过brew医生并更新所有自制程序包无济于事.

cmake(make)显示的具体错误是:

ld: library not found for -l<somelib>

我有asked the question on the Homebrew forumsApple developer forums.

解决方法:

我已将此隔离到VERBOSE = 1 make logs中的以下更改…

> High Sierra(< = 10.13)及以下没有使用-isysroot命令.
> Mojave(> = 10.14)使用-isysroot命令.

gnu.org开始:

-isysroot <dir>
This option is like the --sysroot option, but applies only to header files (except for Darwin targets, where it applies to both header files and libraries). See the --sysroot option for more @R_52_4045@ion.

所以这个标志只在Apple上破坏了lib搜索路径.这导致编译从不查看标准的ld位置,可以通过键入ld -v dummy来查看.

Library search paths:
    /usr/lib
    /usr/local/lib

为什么cmake这样做?我的想法是用新的Mojave SDK行为来修复/usr/local/include issues.

不幸的是,我找不到一个cmake编译标志来重新添加认库搜索路径.现在我找到的唯一解决方案是将以下内容添加到我的项目中:

IF(APPLE)
    # Fix linking on 10.14+. See https://stackoverflow.com/questions/54068035
    LINK_DIRECTORIES(/usr/local/lib)
ENDIF()

我不确定这是否是一种保证上游cmake补丁的行为.如果有更好的解决方案,请提供.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐