C++ 链接在自制软件中不起作用';从莫哈韦开始

C++ 链接在自制软件中不起作用';从莫哈韦开始,c++,cmake,homebrew,C++,Cmake,Homebrew,我现在已经在两台计算机上重现了这种症状,cmake似乎不再在/usr/local/lib(或者更准确地说,$(brew--prefix)/lib)中查找自将我的计算机升级到macOS Mojave以来自制的库 尽管有一些方法可以避免这种情况(例如,使用EXECUTE\u PROCESS搜索自制前缀;将结果添加到LINK\u库(…)命令),但没有一种方法是理想的。莫哈韦发生了什么变化来打破这种行为 临时解决方法是将以下内容添加到CMakeLists.txt: # WARNING: Don't ha

我现在已经在两台计算机上重现了这种症状,
cmake
似乎不再在
/usr/local/lib
(或者更准确地说,
$(brew--prefix)/lib
)中查找自将我的计算机升级到macOS Mojave以来自制的库

尽管有一些方法可以避免这种情况(例如,使用
EXECUTE\u PROCESS
搜索自制前缀;将结果添加到
LINK\u库(…)
命令),但没有一种方法是理想的。莫哈韦发生了什么变化来打破这种行为

临时解决方法是将以下内容添加到
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>
ld:找不到-l的库

我已经和.

VERBOSE=1 make
日志中,我已经将其与以下更改隔离开来

  • High Sierra(=10.14)使用
    -isysroot
    命令
发件人:

-isysroot
此选项类似于
--sysroot
选项,但仅适用于头文件(,Darwin目标除外,它同时适用于头文件和库)。有关更多信息,请参阅
--sysroot
选项

因此,这个标志只在苹果上明确地屏蔽了
lib
搜索路径。这导致编译从不查看标准的
ld
位置,可以通过键入
ld-v dummy
查看这些位置

Library search paths:
    /usr/lib
    /usr/local/lib
为什么
cmake
会这样做?我的想法是用新的Mojave SDK行为修复引入的问题

不幸的是,我找不到
cmake
compile标志来添加默认的库搜索路径。目前,我找到的唯一解决方案是将以下内容添加到我的项目中:

IF(APPLE)
    # Fix linking on 10.14+. See https://stackoverflow.com/questions/54068035
    LINK_DIRECTORIES(/usr/local/lib)
ENDIF()
我不确定这是否是一种需要上游
cmake
补丁的行为。如果有更好的解决方案,请提供。

尝试在OS X Mojave(10.14)下的Django应用程序中安装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不再是 周恩可。。。»

解决方案:

我根据自己的需要调整了解决方案。然后我终于能够运行
pip安装psycopg2
。以下是命令序列(update:在项目根目录内,即您看到manage.py的地方)

首先

然后


我发现解释如何使用
ld-v2
列出链接器搜索路径。在High Sierra上,它在默认链接器路径中列出了
/usr/local/lib
。需要和莫哈韦进行比较。。。。更新,Mojave在默认链接器路径中也有
/usr/local/lib
。只有在将
VERBOSE=1
添加到
make
并比较10.13和10.14之间的确切链接器标志后,我才能跟踪到添加的新
-isysroot
标志。下面是有关MacPorts设置的详细讨论,LDFLAGS和CPPFLAGS似乎已在没有chowning/usr/local Mojave 10.14.6的情况下解决了此问题谢谢!我也有同样的问题。这让我发疯。谢谢你。这是一个让我着迷的问题。我在哪里添加代码?如果您是从源代码构建的,我猜是
CMakeLists.txt
,但我不熟悉代码库。如果您是从MacPorts或Homebrew之类的软件进行安装,则可能需要将其放入补丁文件中,或者提交到Wireshark codereview过程中。Wireshark非常受欢迎,因此可能值得在这里或Wireshark bug追踪器上专门提问。
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