试图在OS X Yosemite 10.10.1上编译GnuPG-2.1.1

时间:2014-11-29 12:03:56

标签: macos x86-64 gnupg build-error ar

在尝试构建最新的GnuPG(2.1.1 modern )时,我的构建在尝试链接t-stringhelp时失败。 make输出:

ld: warning: ignoring file libcommon.a, file was built for archive which is not the architecture being linked (x86_64): libcommon.a
Undefined symbols for architecture x86_64:
  "_compare_filenames", referenced from:
      _main in t-stringhelp.o
  "_make_absfilename_try", referenced from:
      _main in t-stringhelp.o
  "_make_filename_try", referenced from:
      _main in t-stringhelp.o
  "_percent_escape", referenced from:
      _main in t-stringhelp.o
  "_strconcat", referenced from:
      _main in t-stringhelp.o
  "_xstrconcat", referenced from:
      _main in t-stringhelp.o

我不知道如何修复此问题,因为libcommon是源代码的一部分,因此它应该构建正常。使用CFLAGS="-m64"进行构建时(-arch x86_64什么都不做),我明白了:

ld: warning: ignoring file ../common/libgpgrl.a, file was built for archive which is not the architecture being linked (x86_64): ../common/libgpgrl.a
Undefined symbols for architecture x86_64:
  "_gnupg_rl_initialize", referenced from:
      _main in gpg.o

除了pinentry之外,我还重建了所有遗嘱(我在小牛队建立它们),因为它找不到libiconv也已安装。我的configure输出的目标是Darwin (x86_64-apple-darwin14.0.0),所以这应该有效。我已经获得了所有最新的先决条件,尝试在其自己的目录中安装所有内容(--prefix = / usr / local / gnupg-2.1.1),将所有依赖项和GnuPG构建为32位(同样,在同一错误上失败) ),创建了一个单独的构建文件夹,并尝试在那里构建,但到目前为止只有一件事解决了错误:查看libgpgrl.a是如何构建的 - 它的唯一组件是common/gpgrlhelp.c - 所以我cd加入g10并尝试构建gpg2,将../common/libgpgrl.a替换为../common/gpgrlhelp.o,将lib common.a替换为libksba它的目标文件,适用于所有不起作用的库。然后有些程序没有链接到libgcrypt libassuangpg2,因此我更改了Makefile,以便它们可以链接。我现在可以很好地编译所有代码,我安装了所有代码,但是当我尝试运行dyld: lazy symbol binding failed: Symbol not found: __gcry_mpi_init Referenced from: /usr/local/gnupg-2.1.1/lib/libgcrypt.20.dylib Expected in: flat namespace dyld: Symbol not found: __gcry_mpi_init Referenced from: /usr/local/gnupg-2.1.1/lib/libgcrypt.20.dylib Expected in: flat namespace 时出现了新的错误:

/usr/local/gnupg-2.1.1/bin:/usr/local/gnupg-2.1.1/lib:/Library/Frameworks/Python.framework/Versions/3.4/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/local/bin:/usr/local/mysql/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin

我的道路上有一切,即:

{{1}}

我可以在Mavericks上编译GnuPG-2.0.22,但没有版本的GnuPG在Yosemite上构建。

请帮助,我真的很困惑。

3 个答案:

答案 0 :(得分:3)

我已经在Yosemite 10.10.2(本文撰写时的最新公开测试版)上运行了GnuPG 2.1大约一周,而且一切都很好。

您可以关注these directions以使用brew tap,也可以使用原始网址:brew install https://github.com/mtigas/homebrew-gpg21/raw/master/Formula/gnupg2.rb

请注意,此公式会安装 GnuPG 2.1 ;不是GnuPG 2.1.1,最初询问的版本。我可以使用2.1(显然是this bug)确认fixed in 2.1.1 gpg2 --refresh-keys失败,其中一些密钥服务器失败了,但它会让你获得90%。

更新公式以安装2.1.1应该不难。

<强>更新 有人提交了GNuPG 2.1.1支持的拉取请求 - 我刚尝试过它并且效果很好。简答:brew install https://raw.githubusercontent.com/calebthompson/homebrew-gpg21/2.1.1/Formula/gnupg2.rb

答案 1 :(得分:1)

就我个人而言,我会安装homebrew,这是一个从他们的网站(http://brew.sh)粘贴的单线,然后

brew install gnupg

如果有任何问题,请运行

brew doctor

并听取了医生的建议。

答案 2 :(得分:0)

原来我在ranlib中有一个/usr/local/bin/ranlib。它被打破了,我不知道它是如何到达那里的(我确实试图在某些时候构建gcc,它不支持make uninstall,所以这可能就是为什么)。我跑了:

sudo mv /usr/local/ranlib /usr/local/ranlib_old

然后我只是重建了所有的依赖项,并且它有效!