我正在尝试使用 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/