【发布时间】:2017-02-14 21:29:18
【问题描述】:
我正在尝试使用实现 Paillier 加密的 this 库并在 Xcode 中使用 GMP 库。
为此,我下载了这两个库并成功构建了它们。然后我在 Xcode 的项目设置中将“usr/local/include”添加到“Header Search Paths”和“/usr/local/lib”到“Library Search Paths”。我还在“其他链接器标志”中添加了“-lgmp”和“-lpaillier”。
我可以毫无问题地包含“gmp.h”和“paillier.h”,而且我也可以使用 gmp 功能。但是,如果我尝试使用 paillier 功能,则会出现构建错误。
Undefined symbols for architecture x86_64:
"paillier_keygen(int, paillier_pubkey_t**, paillier_prvkey_t**, void (*)(void*, int))", referenced from:
DOwner::run() in downer.o
"paillier_get_rand_devrandom(void*, int)", referenced from:
DOwner::run() in downer.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我试图通过谷歌找到解决这个问题的方法,但没有发现任何工作。
更新
我将标志“-lpaillier”切换为“-l:libpaillier.a”并收到以下错误:
ld: library not found for -l:libpaillier.a
clang: error: linker command failed with exit code 1 (use -v to see invocation)
这很奇怪,因为文件“libpaillier.a”与“libgmp.a”在/usr/local/lib 中,所以它怎么能找到gmp 文件而不是这个文件。为了检查 Xcode 是否在不同的目录中搜索,我运行了 sudo find / -name "libgmp.a" 以查看 Xcode 可能正在使用它的任何其他实例,但 /usr/local/lib 中只有一个。
更新
为了确保 Xcode 链接到库,我转到“Build Phases”>“Link Binary With Library”并将文件“libpaillier.a”拖到其中。但错误仍然存在。
更新
我将构成整个源代码的 paillier.h 和 paillier.c 文件复制到我的项目文件夹中。然后我将 paillier.c 链接到我的目标项目。问题仍然存在。但是当我将文件重命名为 paillier.hpp 和 paillier.cpp 时,因为我的项目是一个 cpp 项目,问题就解决了。但是,我收到另一个错误,指出库使用的 void 指针算术是非法的。有没有办法在 Xcode 中允许 void 指针算术?
【问题讨论】:
标签: c++ xcode linker-errors