Xcode中的C \ C ++构建链接器错误

用户名

我想使用这个库实现Paillier密码,并使用GMP在Xcode库。

为此,我下载了两个库并成功构建了它们。然后,在Xcode的项目设置中,将“ usr / local / include”添加到“标题搜索路径”,并将“ / usr / local / lib”添加到“库搜索路径”。我还在“其他链接器标志”中添加了“ -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)

我试图通过Google找到解决此问题的方法,但没有任何效果。

更新

我将标志“ -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”位于/ usr / local / lib中,带有“ libgmp.a”,因此如何找到gmp文件而不找到该文件。为了检查Xcode是否正在其他目录中搜索,我跑了sudo find / -name "libgmp.a"一下,看看是否还有其他Xcode可能正在使用的实例,但是/ usr / local / lib中只有一个。

更新

为了确保Xcode链接到库,我转到“构建阶段”>“使用库链接二进制文件”,并将文件“ libpaillier.a”拖到该库中。但是错误仍然存​​在。

更新

我将构成整个源代码的paillier.h和paillier.c文件复制到了我的项目文件夹中。然后,我将paillier.c链接到我的目标项目。问题仍然存在。但是当我将文件重命名为paillier.hpp和paillier.cpp时,因为我的项目是cpp项目,问题得以解决。但是,我收到另一个错误,该错误表明使用库使用的空指针算法是非法的。有没有一种方法可以在Xcode中进行空指针算术运算?

用户名

最终解决了它,或者说解决了它。

这是我采取的步骤:

  1. 我没有将libpaillier导入为库,而是在项目中包含了源文件。
  2. 我将扩展名重命名为hpp和cpp,因为编译器否则会出现问题。
  3. 我将每个实例替换为用于算术运算符char *的void指针。
  4. 如果需要,我将一些void指针转换为char指针。

尽管这可能不是最优雅的解决方案,但它可行,我找不到其他方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章