在编译 CP-ABE 软件包时,链接 GMP 出现错误

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个回答

6

对于一些人来说,这可能是微不足道的,但是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; }

3

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

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

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

  • make install


我尝试做这个,但遇到了错误 gcc -o cpabe-setup setup.o common.o -lgmp -lpbc -lcrypto -L/usr/lib/x86_64-linux-gnu -lglib -lbswabe -lgmp /usr/bin/ld: 找不到 -lglib collect2: 错误:ld 返回 1 退出状态 make: *** [cpabe-setup] 错误 1 我该如何解决这个问题? - user3388925

3

我的翻译是MarAlavi的一个小变化,适用于Linux Mint 16:

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

请注意 "-lglib-2.0"。


0
尝试将其添加到链接器命令行中。你是否尝试按照错误提示将-lgmp添加到链接命令行中?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接