Видимость символов, статическая, динамическая линковка: различия между версиями

Материал из test
Нет описания правки
Строка 10: Строка 10:


== Объектные файлы (relocatable). Статические библиотеки ==
== Объектные файлы (relocatable). Статические библиотеки ==
<syntaxhighlight lang="c" line>
int reloc_global_without(int b) {
    return b + 1;
}
static int reloc_static_without(int b) {
    return b + 2;
}
int __attribute__((visibility ("hidden"))) reloc_global_hidden(int b) {
    return reloc_static_without(b) + 3;
}
int __attribute__((visibility ("default"))) reloc_global_default(int b) {
    return b + 4;
}
</syntaxhighlight>
== Динамические библиотеки (shared objects) ==
== Динамические библиотеки (shared objects) ==
== Ссылки ==
== Ссылки ==
* [https://gcc.gnu.org/wiki/Visibility Дока gcc];
* [https://gcc.gnu.org/wiki/Visibility Дока gcc];
* [https://cs.dartmouth.edu/~sergey/cs258/ABI/UlrichDrepper-How-To-Write-Shared-Libraries.pdf Статья про динамические либы (UlrichDrepper)];
* [https://cs.dartmouth.edu/~sergey/cs258/ABI/UlrichDrepper-How-To-Write-Shared-Libraries.pdf Статья про динамические либы (UlrichDrepper)];

Версия от 17:35, 1 июля 2026

Посмотреть таблицу символов (используется при линковке, во время сборки):

objdump -t

Посмотреть динамическую таблицу символов (используется в рантайме динамическим линкером):

objdump -T

Объектные файлы (relocatable). Статические библиотеки

int reloc_global_without(int b) {
    return b + 1;
}

static int reloc_static_without(int b) {
    return b + 2;
}

int __attribute__((visibility ("hidden"))) reloc_global_hidden(int b) {
    return reloc_static_without(b) + 3;
}

int __attribute__((visibility ("default"))) reloc_global_default(int b) {
    return b + 4;
}

Динамические библиотеки (shared objects)

Ссылки