c - 当我想要一个共享库时,GCC 输出一个可执行的 ELF 文件

标签 c gcc shared-libraries cross-compiling elf

我正在尝试使用 i686-elf 交叉编译器在 Cygwin 中构建一个共享库。代码非常简单:

int add(int a, int b) {
    return a + b;
}

void _init() {
    add(3, 4);
}

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

i686-elf-gcc -fPIC -shared -nostdlib core.c -o libcore.so

这应该是生成一个共享对象吧?但是 GCC 会输出一条关于无法找到 _start 符号的警告,这是可执行文件的入口点,而不是共享对象。此外,readelf 说了以下内容:

$ readelf -a libcore.so
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  ...
  Type:                              EXEC (Executable file)
  ...

这里出了什么问题?

最佳答案

问题本质上是您以 i686-elf 为目标,但没有人为该目标构建共享库。 -Wl,-shared 会给你一些标记为共享库的东西,但是你打算如何在裸机目标上加载共享库呢?

关于c - 当我想要一个共享库时,GCC 输出一个可执行的 ELF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5919122/

相关文章:

gcc - 禁用-msse

linux - 是否可以绕过已编译可执行文件所需的共享库依赖项?

c - printf() 和 scanf() 函数何时静态或动态链接到应用程序?

c++ - 如何使用 C++ 单例返回仅初始化一次的对象

c - 在 OSX 10.10 上安装 GCC 4.4.7

c - 未找到输入符号

arrays - Linux需要多长时间清理堆内存

c - 传递和更改数组,通过引用传递,使用 C 中的指针

c - XPutImage 不显示任何内容

c++ - C/C++ : Write and Read Sockets