我现在已经在两台计算机上重现了这个症状,自从我的机器升级到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医生并更新所有自制程序包无济于事.
ld: library not found for -l<somelib>
我有asked the question on the Homebrew forums和Apple 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] 举报,一经查实,本站将立刻删除。