【问题标题】:C\C++ build linker error in XcodeXcode 中的 C\C++ 构建链接器错误
【发布时间】: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


    【解决方案1】:

    从第一个错误来看,很可能您正在构建 32 位库(我猜您有一些用于构建库的 makefile)和 64 位应用程序,因此链接器找到了库,但没有找到为您的预期架构实现。

    因此,请在 Xcode 中为应用程序检查您的项目设置并将其更改为 32 位。或者看看有没有构建64位库的构建指令。

    【讨论】:

    • 我已经尝试过了,但我收到了Undefined symbols for architecture i386,所以我认为这不是问题
    【解决方案2】:

    终于解决了,或者更确切地说是绕过它。

    这是我采取的步骤:

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

    虽然这可能不是最优雅的解决方案,但它确实有效,我找不到其他方法。

    【讨论】:

      猜你喜欢
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 2015-09-19
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多