Видимость символов, статическая, динамическая линковка: различия между версиями
Материал из test
Mih (обсуждение | вклад) Новая страница: «== Объектные файлы (relocatable). Статические библиотеки == == Динамические библиотеки (shared objects) == == Ссылки == * [https://gcc.gnu.org/wiki/Visibility Дока gcc]; * [https://cs.dartmouth.edu/~sergey/cs258/ABI/UlrichDrepper-How-To-Write-Shared-Libraries.pdf Статья про динамические либы (UlrichDrepper)];» |
Mih (обсуждение | вклад) |
||
| (не показаны 2 промежуточные версии этого же участника) | |||
| Строка 1: | Строка 1: | ||
Посмотреть таблицу символов (используется при линковке, во время сборки): | |||
<pre> | |||
objdump -t | |||
</pre> | |||
Посмотреть динамическую таблицу символов (используется в рантайме динамическим линкером): | |||
<pre> | |||
objdump -T | |||
</pre> | |||
== Объектные файлы (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> | |||
разобрать: | |||
<pre> | |||
clang reloc.c -c | |||
objcopy --globalize-symbol=reloc_static_without reloc.o | |||
objcopy --localize-symbol=reloc_static_without reloc.o | |||
clang reloc.c -c -fvisibility=hidden | |||
clang reloc.o main.c -o main | |||
meson and CMake: | |||
CMake default without hidden flag | |||
meson default without hidden flag | |||
meson setup build_meson | |||
meson compile -C build_meson --verbose | |||
cmake link.txt compile_commands.json | |||
meson compile_commands.json | |||
</pre> | |||
== Динамические библиотеки (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:45, 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;
}
разобрать:
clang reloc.c -c objcopy --globalize-symbol=reloc_static_without reloc.o objcopy --localize-symbol=reloc_static_without reloc.o clang reloc.c -c -fvisibility=hidden clang reloc.o main.c -o main meson and CMake: CMake default without hidden flag meson default without hidden flag meson setup build_meson meson compile -C build_meson --verbose cmake link.txt compile_commands.json meson compile_commands.json