在尝试构建最新的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
libassuan
和gpg2
,因此我更改了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上构建。
请帮助,我真的很困惑。
答案 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
然后我只是重建了所有的依赖项,并且它有效!