我正在遵循here的一些代码,如下所示:

OP表示您可以与-lbfd -lopcodes链接。

但是,对于OpenSuSE,我发现对于libbfd我需要-lbfd -liberty -lz -ldl
尝试编译时,这是我的结果:

使

gcc ./main.c -lbfd -liberty -lz -ldl -lopcodes -g -o bfd_se

/usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../lib64/libopcodes.a(arm-dis.o):在函数print_insn_neon中:
/home/abuild/rpmbuild/BUILD/binutils-2.24/build-dir/opcodes/../../opcodes/arm-dis.c:2927:对`floatformat_ieee_single_little'的 undefined reference
/home/abuild/rpmbuild/BUILD/binutils-2.24/build-dir/opcodes/../../opcodes/arm-dis.c:2927:对`floatformat_to_double'的 undefined reference
/usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../lib64/libopcodes.a(m68k-dis.o):在函数`print_insn_arg'中:
/home/abuild/rpmbuild/BUILD/binutils-2.24/build-dir/opcodes/../../opcodes/m68k-dis.c:1103:对`floatformat_m68881_ext'的 undefined reference
/home/abuild/rpmbuild/BUILD/binutils-2.24/build-dir/opcodes/../../opcodes/m68k-dis.c:1103:对`floatformat_to_double'的 undefined reference
/home/abuild/rpmbuild/BUILD/binutils-2.24/build-dir/opcodes/../../opcodes/m68k-dis.c:1099:对`floatformat_ieee_double_big'的 undefined reference
/home/abuild/rpmbuild/BUILD/binutils-2.24/build-dir/opcodes/../../opcodes/m68k-dis.c:1099:对`floatformat_to_double'的 undefined reference
/home/abuild/rpmbuild/BUILD/binutils-2.24/build-dir/opcodes/../../opcodes/m68k-dis.c:1095:对`floatformat_ieee_single_big'的 undefined reference
/home/abuild/rpmbuild/BUILD/binutils-2.24/build-dir/opcodes/../../opcodes/m68k-dis.c:1095:对`floatformat_to_double'的 undefined reference
collect2:错误:ld返回1退出状态
Makefile:4:目标“bfd_se”的配方失败
make:*** [bfd_se]错误1

我还需要添加其他哪些标志来编译该程序?我看到该错误与不同的体系结构有关,但我没有尝试交叉编译。

谢谢!

有用的信息:
优名

Linux节点4.0.5-THS_on#1 SMP PREEMPT周四6月18日16:37:06 CDT 2015 x86_64 x86_64 x86_64 GNU/Linux

gcc --version

gcc(SUSE Linux)4.8.3 20140627 [gcc-4_8-branch修订版212064]
版权所有(C)2013自由软件基金会,Inc.
这是免费软件;请参阅复制条件的来源。没有
保证;甚至不是针对特定目的的适销性或适用性。

objdump --version(使用libbfd和libopcodes)

GNU objdump(GNU Binutils; openSUSE 13.2)2.24.0.20140403-6.1
版权所有2013 Free Software Foundation,Inc.
该程序是免费软件;您可以根据以下条款重新分发它
GNU通用公共(public)许可证版本3或(可选)任何更高版本。
该程序绝对没有保修。

最佳答案

在大多数情况下,libbfdlibopcodes在标准发行版中都不作为共享库出现(因为它们并不是要链接到的)。您必须链接到静态库(libbfd.alibopcodes.a),或者重新编译您的分发包并在其中包括共享库(.so文件)。

因此,为清楚起见,请尝试:

gcc ./main.c -liberty -lz -ldl -g -o bfd_se /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../lib64/libopcodes.a /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../lib64/libbfd.a

关于c - 针对libopcodes编译时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34952123/

10-11 21:13