从源代码编译cpabe包时链接gmp时出错

时间:2013-06-28 20:41:47

标签: ubuntu compilation linker gmp

我最后花了几个小时从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 个答案:

答案 0 :(得分: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; }

答案 1 :(得分:4)

添加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”

  • make install

答案 2 :(得分:2)

对于Linux Mint 16来说,Mine是MarAlavi的一个小变化:

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

注意" -lglib-2.0"。

答案 3 :(得分:0)

  

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

您是否尝试将-lgmp添加到链接命令行,如错误所示?