根据libopcode编译时出错

根据libopcode编译时出错,c,gcc,compiler-errors,binutils,C,Gcc,Compiler Errors,Binutils,下面是一些代码,如下所示: OP说您可以链接到-lbfd-lopcodes 然而,对于OpenSuSE,我发现对于libbfd,我需要-lbfd-liberty-lz-ldl 尝试编译时,以下是我的结果: make 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):

下面是一些代码,如下所示:

OP说您可以链接到
-lbfd-lopcodes

然而,对于OpenSuSE,我发现对于libbfd,我需要
-lbfd-liberty-lz-ldl

尝试编译时,以下是我的结果:

make 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): In function `print_insn_neon': /home/abuild/rpmbuild/BUILD/binutils-2.24/build-dir/opcodes/../../opcodes/arm-dis.c:2927: undefined reference to `floatformat_ieee_single_little' /home/abuild/rpmbuild/BUILD/binutils-2.24/build-dir/opcodes/../../opcodes/arm-dis.c:2927: undefined reference to `floatformat_to_double' /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../lib64/libopcodes.a(m68k-dis.o): In function `print_insn_arg': /home/abuild/rpmbuild/BUILD/binutils-2.24/build-dir/opcodes/../../opcodes/m68k-dis.c:1103: undefined reference to `floatformat_m68881_ext' /home/abuild/rpmbuild/BUILD/binutils-2.24/build-dir/opcodes/../../opcodes/m68k-dis.c:1103: undefined reference to `floatformat_to_double' /home/abuild/rpmbuild/BUILD/binutils-2.24/build-dir/opcodes/../../opcodes/m68k-dis.c:1099: undefined reference to `floatformat_ieee_double_big' /home/abuild/rpmbuild/BUILD/binutils-2.24/build-dir/opcodes/../../opcodes/m68k-dis.c:1099: undefined reference to `floatformat_to_double' /home/abuild/rpmbuild/BUILD/binutils-2.24/build-dir/opcodes/../../opcodes/m68k-dis.c:1095: undefined reference to `floatformat_ieee_single_big' /home/abuild/rpmbuild/BUILD/binutils-2.24/build-dir/opcodes/../../opcodes/m68k-dis.c:1095: undefined reference to `floatformat_to_double' collect2: error: ld returned 1 exit status Makefile:4: recipe for target 'bfd_se' failed make: *** [bfd_se] Error 1 制作 gcc./main.c-lbfd-liberty-lz-ldl-lopcodes-g-obfd\u se /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../../../../../../lib64/libopcodes.a(arm dis.o):在函数“print\u insn\u neon”中: /home/abuild/rpmbuild/BUILD/binutils-2.24/BUILD dir/opcodes/./../opcodes/arm dis.c:2927:未定义对“floatformat\u ieee\u single\u little”的引用 /home/abuild/rpmbuild/BUILD/binutils-2.24/BUILD dir/opcodes/./../opcodes/arm dis.c:2927:未定义对“浮动格式”的引用 /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../../../../../lib64/libopcodes.a(m68k dis.o):在函数“print\u insn\u arg”中: /home/abuild/rpmbuild/BUILD/binutils-2.24/BUILD dir/opcodes/./../opcodes/m68k dis.c:1103:对“浮动格式”的未定义引用 /home/abuild/rpmbuild/BUILD/binutils-2.24/BUILD dir/opcodes/./../opcodes/m68k dis.c:1103:未定义对“浮动格式”的引用 /home/abuild/rpmbuild/BUILD/binutils-2.24/BUILD dir/opcodes/./../opcodes/m68k dis.c:1099:未定义对“floatformat\u ieee\u double\u big”的引用 /home/abuild/rpmbuild/BUILD/binutils-2.24/BUILD dir/opcodes/./../opcodes/m68k dis.c:1099:未定义对“浮动格式”的引用 /home/abuild/rpmbuild/BUILD/binutils-2.24/BUILD dir/opcodes/./../opcodes/m68k dis.c:1095:未定义对“floatformat\u ieee\u single\u big”的引用 /home/abuild/rpmbuild/BUILD/binutils-2.24/BUILD dir/opcodes/./../opcodes/m68k dis.c:1095:对“floatformat”的未定义引用 collect2:错误:ld返回了1个退出状态 Makefile:4:目标“bfd_se”的配方失败 make:**[bfd_se]错误1 我需要添加哪些其他标志才能编译此程序?我看到这个错误与不同的体系结构有关,但我不想交叉编译

谢谢

有用信息: 联阿援助团

Linux节点4.0.5-THSU on#1 SMP抢占Thu Jun 18 16:37:06 CDT 2015 x86_64 x86_64 x86_64 GNU/Linux gcc——版本

gcc(SUSE Linux)4.8.3 20140627[gcc-4_8-branch修订版212064] 版权所有(C)2013免费软件基金会。 这是自由软件;有关复制条件,请参见源。没有 担保甚至不是为了适销性或适合某一特定目的。 objdump——版本(它使用libbfd和libopcode)

GNU objdump(GNU Binutils;openSUSE 13.2)2.24.0.20140403-6.1 版权所有2013免费软件基金会。 这个程序是自由软件;您可以根据 GNU通用公共许可证版本3或(由您选择)任何更高版本。 这个计划绝对没有保证。
大多数情况下,
libbfd
libopcodes
在标准发行版中不是作为共享库提供的(因为它们不打算链接到)。您必须链接到静态库(
libbfd.a
libopcodes.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 

我已经安装了
binutils dev
,但是让我尝试一下,真正的quicknot对.a有效,但它对.so有效,并且它与libbfd.so位于同一目录中。有什么想法吗?我的意思是,你应该试着做以下事情:
gcc./main.c-liberty-lz-ldl-g-o bfdúu se/usr/lib/libopcodes.a
(或者两个库的路径)。问题是,这不是很容易移植的-/相反,它会比需要的更大。无论如何,请尝试在您的发行版中查找
libbfd*.so
libopcodes*.so
,如果您没有找到它,这意味着这就是问题所在。我知道binutils开发的Debian(不稳定)包有
.so
文件,但在许多发行版中并非如此。 gcc (SUSE Linux) 4.8.3 20140627 [gcc-4_8-branch revision 212064] Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. GNU objdump (GNU Binutils; openSUSE 13.2) 2.24.0.20140403-6.1 Copyright 2013 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or (at your option) any later version. This program has absolutely no warranty.
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