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

Материал из test
 
Строка 28: Строка 28:
}
}
</syntaxhighlight>
</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) ==

Текущая версия от 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

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

Ссылки