8

我最终花了几个小时从 Ubuntu 12.10 中的源代码编译 cpabe 包,并具有 gmp 和 pbc 依赖项。以下错误消息似乎是 Web 中许多人的问题(即使是编译其他需要安装 libgmp 作为依赖项的软件包!)。然而,我在那里找不到任何可行的解决方案:

...
/usr/bin/ld: /usr/local/lib/libpbc.so: undefined reference to symbol '__gmpz_init'
/usr/bin/ld: note: '__gmpz_init' is defined in DSO /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libgmp.so so try adding it to the linker command line
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libgmp.so: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
4

4 回答 4

5

对你们中的一些人来说这可能是微不足道的,但是 policy_lang.y 在第 67 行缺少分号,因此编译失败并显示:

 policy_lang.y: In function ‘yyparse’:
 policy_lang.y:67:38: error: expected ‘;’ before ‘}’ token
 result: policy { final_policy = $1 }

可以通过将第 67 行更改为

 result: policy { final_policy = $1; }
于 2015-03-03T21:58:42.253 回答
3

添加 lgmp 是必要的,但所有其他使用的库也需要链接。我终于通过在发出 make 命令时在 LDFLAGS 环境变量中指定这些库来解决了这个问题。因此,在安装 gmp、pbc、bswabe 或任何其他所需的依赖项后,编译步骤如下:

  • ./configure -with-pbc-include=path -with-pbc-lib=path (安装 pbc.h 和 libpbc 的路径)

  • 使 LDFLAGS="-lgmp -lpbc -lcrypto -L/usr/lib/x86_64-linux-gnu -lglib -lbswabe -lgmp"

  • 进行安装

于 2013-07-02T01:05:11.070 回答
3

对于 linux Mint 16,我的是 MarAlavi 的一个轻微变体:

  • ./configure -with-pbc-include=path -with-pbc-lib=pathpbc.h(安装路径libpbc
  • make LDFLAGS="-lgmp -lpbc -lcrypto -L/usr/lib/x86_64-linux-gnu -lglib-2.0 -lbswabe -lgmp"
  • make install

注意“ -lglib-2.0”。

于 2014-03-27T21:38:39.093 回答
0

尝试将其添加到链接器命令行

您是否尝试-lgmp按照错误提示添加到链接命令行?

于 2013-06-29T02:34:48.420 回答