【问题标题】:Trying to compile GnuPG-2.1.1 on OS X Yosemite 10.10.1尝试在 OS X Yosemite 10.10.1 上编译 GnuPG-2.1.1
【发布时间】:2014-11-29 12:03:55
【问题描述】:

在尝试构建最新的 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之外,我还重建了所有的depandancies(就像我在Mavericks上构建的那样),因为它找不到同样安装的libiconv。我的configure 输出它的目标是Darwin (x86_64-apple-darwin14.0.0),所以这应该可以工作。我还获得了所有最新的先决条件,尝试将所有内容安装在自己的目录中(--prefix=/usr/local/gnupg-2.1.1),将所有依赖项和 GnuPG 构建为 32 位(再次,同样的错误失败),创建了一个单独的构建文件夹并尝试在其中构建,但到目前为止只有一件事解决了错误:查看 libgpgrl.a 是如何构建的 - 它唯一的组件是 common/gpgrlhelp.c - 所以我 cd'ed进入g10 并尝试构建gpg2,将../common/libgpgrl.a 替换为../common/gpgrlhelp.olib common.a 及其所有目标文件,用于所有不起作用的库。然后有些程序没有链接到libksbalibgcryptlibassuan,所以我更改了Makefile,以便它们可以链接。我现在可以很好地编译所有代码,我安装了所有东西,但是当我尝试运行 gpg2 时出现新错误:

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

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

请帮忙,我真的很困惑。

【问题讨论】:

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


    【解决方案1】:

    我已经在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,最初询问的版本。我可以确认this bug,其中gpg2 --refresh-keys 失败,一些密钥服务器使用2.1(显然是fixed in 2.1.1),但它会让你达到90%。

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

    更新 有人提交了一个请求 GnuPG 2.1.1 支持的请求——我刚刚尝试过,效果很好。简短回答:brew install https://raw.githubusercontent.com/calebthompson/homebrew-gpg21/2.1.1/Formula/gnupg2.rb

    【讨论】:

    • 感谢您的详细回复,我刚刚发现我在/usr/local/bin/ranlib 中有一个ranlib,它已损坏。我将它重命名为/usr/local/bin/ranlib_old,运行make clean 然后make 工作正常,但我与上面描述的错误相同(与dyld 有关,但我计划用@ 重建所有依赖项987654335@)。感谢您的回答,我会尽快添加更多详细信息。
    【解决方案2】:

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

    brew install gnupg
    

    如果有任何问题,运行

    brew doctor
    

    并听从好医生的建议。

    【讨论】:

    • 感谢您的回复,我希望自己构建 GnuPG,这样我就可以修复类似的未来错误并使用自制软件作为最后的手段。
    • 您可以随时查看自制程序中的公式,了解他们是如何构建它的,然后根据您自己的需要进行调整。
    • 我确实看过自制的 GnuPG 公式,但不幸的是,他们使用的是旧版本的 GnuPG,我也尝试构建,但没有成功。
    【解决方案3】:

    原来我在/usr/local/bin/ranlib 中有一个ranlib。它坏了,我不知道它是如何到达那里的(我确实尝试过构建 gcc,它不支持 make uninstall,所以这可能就是原因)。我刚跑:

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

    然后我只是重新构建了所有依赖项,并且成功了!

    【讨论】:

      猜你喜欢
      • 2015-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 2015-10-30
      • 2011-09-01
      • 1970-01-01
      相关资源
      最近更新 更多