首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux上使用bfd.h编译错误

在Linux上使用bfd.h编译错误
EN

Stack Overflow用户
提问于 2011-11-04 00:46:50
回答 3查看 19.1K关注 0票数 14

我是Linux编程新手,我正在尝试使用BFD库。这是我正在试图编译的当前代码:

代码语言:javascript
复制
#include <bfd.h>
#include <stdlib.h>

bfd *abfd;

int main() {
  bfd_init();
  abfd = bfd_openr("/home/mike/Desktop/testFunc/testProg", NULL);
  return 0;
}

我使用以下命令行进行编译:

代码语言:javascript
复制
gcc readInfo.c /usr/lib/libbfd.a -o readInfo

我得到了以下错误:

gcc readInfo.c /usr/lib/libbfd.a /build/buildd/binutils-2.21.53.20110810/builddir-single/bfd/../../bfd/elflink.c:4892: readInfo /usr/lib/libbfd.a(elflink.o):在函数elf_link_add_object_symbols': /build/buildd/binutils-2.21.53.20110810/builddir-single/bfd/../../bfd/elflink.c:4605: undefined reference toobjalloc_free_block的未定义引用_sch_istable' /usr/lib/libbfd.a(elflink.o): In functionbfd_elf_size_dynamic_sections':/build/buildd/binutils-2.21.53.20110810/builddir-single/bfd/..中/./bfd/elflink.c:6048:对lbasename' undefined reference to_sch_istable‘collect2的未定义引用: ld返回1个退出状态:*所有错误1

有更多的错误行,可以查看这里。我相信这是有一个简单的解释,但它已经让我困惑了一段时间。

总结一下我迄今所做的工作:

  • 安装干净Ubuntu
  • 安装的binutils-dev包
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-04 00:54:19

你需要静态链接你的程序吗?

如果您动态地链接它,那么它将编译和运行,而不会出错:

代码语言:javascript
复制
gcc readInfo.c -o readInfo -lbfd

当我试图使它静态链接时,我遇到了一个新的问题:

代码语言:javascript
复制
$ gcc readInfo.c /usr/lib/libbfd.a /usr/lib/x86_64-linux-gnu/libc.a -o readInfo
/usr/bin/ld.bfd.real: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality
    in `/usr/lib/x86_64-linux-gnu/libc.a(strcmp.o)' can not be used when making
    an executable; recompile with -fPIE and relink with -pie
collect2: ld returned 1 exit status
$ gcc -fPIE readInfo.c /usr/lib/libbfd.a /usr/lib/x86_64-linux-gnu/libc.a \
    -o readInfo
/usr/bin/ld.bfd.real: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality
    in `/usr/lib/x86_64-linux-gnu/libc.a(strcmp.o)' can not be used when making
    an executable; recompile with -fPIE and relink with -pie
collect2: ld returned 1 exit status
$ gcc -fPIE -pie readInfo.c /usr/lib/libbfd.a /usr/lib/x86_64-linux-gnu/libc.a \
  -o readInfo
/usr/bin/ld.bfd.real: /usr/lib/libbfd.a(opncls.o): relocation R_X86_64_32S
    against `.rodata' can not be used when making a shared object; recompile with
    -fPIC
/usr/lib/libbfd.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
$ gcc -fPIC -fPIE -pie readInfo.c /usr/lib/libbfd.a \
  /usr/lib/x86_64-linux-gnu/libc.a -o readInfo
/usr/bin/ld.bfd.real: /usr/lib/libbfd.a(opncls.o): relocation R_X86_64_32S
    against `.rodata' can not be used when making a shared object; recompile with
    -fPIC
/usr/lib/libbfd.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
票数 3
EN

Stack Overflow用户

发布于 2015-11-30 12:01:47

如果使用ubuntu安装binutils-dev

代码语言:javascript
复制
sudo apt-get install binutils-dev
票数 25
EN

Stack Overflow用户

发布于 2015-05-04 11:36:01

gcc -v -o blah /usr/lib64 64/libbfd.a/usr/lib64 64/libiberty.a -ldl -lz

看起来libbfd需要libiberty、dl和z的特性--这是在opensuse 13.1 x86_64上使用的类似的简单测试应用程序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8003763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档