自莫哈韦以来,链接在自制软件的 cmake 中不起作用
Linking not working in homebrew's cmake since Mojave
我现在已经在两台计算机上重现了这种症状,自从我的机器升级到macOS Mojave后,cmake
似乎不再在/usr/local/lib
(或者更准确地说,$(brew --prefix)/lib
)中查找Homebrew提供的库。
尽管有一些方法可以避免这种情况(例如,使用EXECUTE_PROCESS
搜索自制前缀;将结果添加到LINK_LIBRARIES(...)
命令中),但没有一种是理想的。莫哈韦发生了什么变化来打破这种行为?
临时解决方法是在CMakeLists.txt
中添加以下内容:
# WARNING: Don't hard-code this path
LINK_DIRECTORIES(/usr/local/lib)
我已经尝试过brew doctor
,并更新了所有自制软件包,但都没有成功。
cmake
(make
)显示的具体错误为:
ld: library not found for -l<somelib>
我在Homebrew论坛和苹果开发者论坛上问过这个问题。
在OS X Mojave(10.14)下的Django应用程序中尝试pip install psycopg2
时遇到相关(?)问题。我收到以下错误:
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command 'clang' failed with exit status 1
简短的解释:«从High Sierra开始,/usr/local不再是chown able。。。»
解决方案:更改/usr/local的权限以允许Homebrew创建链接。
我根据自己的需要调整了解决方案。然后我终于可以运行pip install psycopg2
了。以下是命令序列(update:在您的项目根目录中,即您看到manage.py的位置)。
第一个
sudo chown -R $(whoami) $(brew --prefix)/*
然后
brew reinstall openssl
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
pip install psycopg2
我已经将其与VERBOSE=1 make
日志中的以下更改隔离开来。。。
- High Sierra(<=10.13)及以下版本使用了NOT
-isysroot
命令 - 莫哈韦(>=10.14)确实使用
-isysroot
命令
来自gnu.org:
-isysroot <dir>
此选项类似于--sysroot
选项,但仅适用于头文件(除了Darwin目标,它同时适用于头和库)。有关详细信息,请参阅--sysroot
选项。
因此,此标志仅在Apple上专门破坏lib
搜索路径。这导致编译从不查找标准ld
位置,这可以通过键入ld -v dummy
来查看。
Library search paths:
/usr/lib
/usr/local/lib
cmake
为什么要这样做?我的想法是修复新的Mojave SDK行为引入的/usr/local/include
问题。
不幸的是,我找不到cmake
编译标志来添加默认的库搜索路径。目前,我找到的唯一解决方案是将以下内容添加到我的项目中:
IF(APPLE)
# Fix linking on 10.14+. See https://stackoverflow.com/questions/54068035
LINK_DIRECTORIES(/usr/local/lib)
ENDIF()
我不确定这是否是一种需要上游cmake
补丁的行为。如果有更好的解决方案,请提供。
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用CMake创建QML插件
- cmake如何在fedora工作站中找到boost静态库包
- 使用CMake检测支持的C++标准
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 如何使用CMake编译.proto文件来生成.grpcp.pb.cc和.grpc.pb.h文件
- cmake在我的项目中所需的所有静态库都不成功
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 无法链接 CMake 中的本地库
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 如何在Ubuntu中使用cmake设置qt4
- 如何使用自制软件,cMake和cLion将库添加到C++项目中
- 安装CMake后,我找不到带有"find_package"的软件包
- CMake - 安装问题以制作软件包
- vcpkg 在安装软件包时找不到 cmake.cmd
- 如何让 CMake 下载外部软件包并使用它
- 自莫哈韦以来,链接在自制软件的 cmake 中不起作用
- 使用CMAKE软件编译.CPP文件