Я написал интерфейс для генератора кода, который позволяет мне создавать общие объекты. Хотя я не хочу реализовывать поддержку таблицы заголовков разделов, потому что в ней остается большая часть сложности формата файла ELF.
GNU ld использует заголовки разделов для связи с общими объектами. Это означает, что когда я пытаюсь поместить ссылку gcc на мой общий объект без заголовков разделов, это не удастся, потому что ld не находит символы, даже если они существуют в библиотеке.
Существует ли какая-то хитрость, которую я мог бы использовать, чтобы обмануть компилятор, чтобы сделать компоновку успешной, даже если он не найдет определенные символы?
Вот некоторые разъяснения по поводу проблемы:
cheery@ruttunen:~/Documents/g386$ gcc dev/shared_test.c -L. -lshared -m32
/tmp/cc6qBViY.o: In function `main':
shared_test.c:(.text+0xa): undefined reference to `example_function'
collect2: ld returned 1 exit status
cheery@ruttunen:~/Documents/g386$ cat dev/shared_test.c
// gcc shared_test.c -L. -lshared -m32
// LD_LIBRARY_PATH=. ./a.out
#include <stdio.h>
extern int example_function();
int main(){
printf("hello %d\n", example_function());
}
cheery@ruttunen:~/Documents/g386$ readelf -D -s libshared.so
Symbol table for image:
Num Buc: Value Size Type Bind Vis Ndx Name
2 0: 00800164 0 FUNC GLOBAL DEFAULT ABS example_function
1 0: 008000ac 0 OBJECT GLOBAL DEFAULT ABS _DYNAMIC