<p>听起来你已经(至少部分地)回答了你自己的问题,但我以一种不同的方式解决了同样的错误。<strong>摘要:</strong>我使用<code>otool</code>和<code>install_name_tool</code>手动将<code>*.so</code>文件的链接更改为另一个{<cd4>}。我在这里发布它主要是为了说明如果你不小心,构建系统是如何迅速变成老鼠窝的。在</p>
<h3>背景</h3>
<p>我使用conda来管理我试图从源代码(<a href="http://gnuradio.org" rel="nofollow noreferrer">GNU Radio</a>)编译的软件项目的虚拟环境。为了在我的Mac电脑上构建这个项目的图形子模块(<code>gr-qtgui</code>),我相信我犯了一些非常令人发指的违反自然的罪行——下面将详细介绍。在</p>
<p>我避免构建问题的基本策略是尽可能依赖单个包管理器。在本例中,这个荣誉授予了<code>conda</code>,尽管其中一些需要<code>brew</code>和{<cd8>}。在我写这篇文章的时候,我想知道我是否应该链接到Qt4的Mac框架上,但是我最终做的是链接到<code>libQtCore.dylib</code><em>等。</em>由conda在<code>~/miniconda3/envs/gr/lib</code>安装。*</p>
<h3>问题解决方案3>
<p>在让GNU Radio编译完成之后,我在这个虚拟环境中<code>conda install</code>生成matplotlib。一开始我也遇到了一个和OP最初提到的类似的错误:</p>
<pre><code>ImportError: dlopen(/Users/strotmc1/miniconda3/envs/gr/lib/python2.7/site-packages/matplotlib/ft2font.so, 2): Library not loaded: @rpath/libfreetype.6.dylib
Referenced from: /Users/strotmc1/miniconda3/envs/gr/lib/python2.7/site-packages/matplotlib/ft2font.so
Reason: Incompatible library version: ft2font.so requires version 21.0.0 or later, but libfreetype.6.dylib provides version 14.0.0
</code></pre>
<p>我通过导航到有问题的共享对象的目录并检查它来解决问题:</p>
^{pr2}$
<p>换句话说,它链接到libfreetype.dylib位于虚拟环境中,而不是系统上。这有点像是一个错误,因为pyplot还试图访问图形库,这些库的配置已经很奇怪了。我的解决方案是切换到针对freetype的自制版本链接:</p>
<pre><code>>> install_name_tool -change @rpath/libfreetype.6.dylib /usr/local/Cellar/freetype/2.9/lib/libfreetype.6.dylib ft2font.so
</code></pre>
<p>现在matplotlib起作用了!在</p>
<h3>故事的寓意</h3>
<p>我从一开始就说这个故事很难看。写完这篇文章后,我得出以下结论:</p>
<ol>
<li>尽管我能够编译大型软件项目,但我仍然不知道我到底在做什么。在</li>
<li>考虑到编写通用库的困难,以及跨平台存在的差异有多大,以及所有用户对系统的设置都不同,我很惊讶任何<em>曾经</em>的东西都能工作。在</li>
<li>另一方面,这真的是我们能做的最好的吗?似乎复杂性是问题的根源。是否有任何足够复杂的工具来管理复杂性,必然会给系统带来更多的复杂性,从而导致更多的失败机会?在</li>
</ol>
<p>抱歉,这变成了一个沉思而不是一个答案——也许有人会这么好心地建议一个更好的地方来回答这种杂乱无章的问题?在</p>
<p>*坦率地说,我甚至从未考虑过要与位于<code>/Library/Frameworks</code>中的Qt<em>框架进行链接。我不确定构建工具(这里是cmake)是否足够聪明来找到这些框架,因为我还没有尝试过。我会考虑向社会提出这个问题。在</p>