我想在使用i686-elf交叉編譯器的Cygwin中構建一個共享庫。該代碼非常簡單:當我想要一個共享庫時,GCC輸出一個可執行的ELF文件
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)
...
這是怎麼回事?
這工作很好,謝謝。爲了回答你的問題,我正在開發一個加載可重定位ELF模塊的引導程序。 – 2011-05-07 14:19:25