Fj_
|
Carpal Tunnel
|
|
|
|
Рег.: 12.09.2004
|
Сообщений: 8795
|
|
Рейтинг: 3287
|
|
Зачем нужны static libraries?
23.12.2011 18:43
|
|
|
...если есть object files? То есть, если мне влом делать статическую библиотеку из одного исходника, и я вместо этого прям объектный файл линкую, я не наступлю на какие-нибудь ужасные грабли между делом? Интересует в контексте как винды, так и луниксов.
|
The data is the error (c)IIS FTP Server. |
|
monoid
|
|
|
|
|
Рег.: 14.02.2004
|
Сообщений: 1689
|
Из: ГЗ::Б::12
|
Рейтинг: 1331
|
|
Re: Зачем нужны static libraries?
[re: Fj_]
23.12.2011 18:52
|
|
|
В линуксе то, что получается из одного исходника, и так распространяется как объектный файл, всякие crt*.o. Смысл .a в том, что она распространяется как один файл, а при линковке из нее копируются только нужные объектники (см. также -ffunction-sections, -fdata-sections).
|
# |
|
gadfather
|
Carpal Tunnel
|
|
|
|
Рег.: 05.11.2003
|
Сообщений: 47302
|
Из: пл. Гагарина
|
Рейтинг: 16961
|
|
Re: Зачем нужны static libraries?
[re: Fj_]
23.12.2011 18:57
|
|
|
насколько я помню, статическая библиотека в линуксе - всего лишь обычный архив из объектников
|
You can't always get what you want |
|
__ka
|
Nobrainer
|
|
|
|
Рег.: 20.11.2004
|
Сообщений: 533
|
|
Рейтинг: 45
|
|
Re: Зачем нужны static libraries?
[re: Fj_]
23.12.2011 18:59
|
|
|
|
Leo
|
|
|
|
|
Рег.: 06.12.2002
|
Сообщений: 4547
|
Из: 51.5252 N, 0.1322 W
|
Рейтинг: 548
|
|
Re: Зачем нужны static libraries?
[re: Fj_]
24.12.2011 11:30
|
|
|
Тупо удобство. Чтобы не думать, какие объектные файлы линковать надо. Если ты линкуешь файлы напрямую - они линкуются всегда, хоть используешь ты код из них, хоть нет. Если через статическую библиотеку - автоматом линкуются только те объектные файлы, из которых используется код.
На досе/винде, насколько помню, микрософтовскии линкеры чреез библиотеки умели еще и объектные файлы на куски дербанить: типа если у тебя в одном объектом файле сидит две функции, а прога использует только одну, то при линковке через библиотеку не весь код попадает в результат.
|
// Leo |
|
horror
|
гонобобель
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 3784
|
|
Рейтинг: 2137
|
|
Re: Зачем нужны static libraries?
[re: Leo]
24.12.2011 11:37
|
|
|
Quote:
Если ты линкуешь файлы напрямую - они линкуются всегда, хоть используешь ты код из них, хоть нет.
насколько мне известно, они линкуются по тем же правилам, что и подобъектники в статических библиотеках (подразумевается дефолтное поведение дефолтных компиляторов VS + gcc): то бишь не линкуются, если из них ничего не используется
|
|
Leo
|
|
|
|
|
Рег.: 06.12.2002
|
Сообщений: 4547
|
Из: 51.5252 N, 0.1322 W
|
Рейтинг: 548
|
|
Re: Зачем нужны static libraries?
[re: horror]
24.12.2011 12:03
|
|
|
Нифига. Это ж проверяется элементарно:
code:
$ cat foo.c
void foo() { static char *x = "hello"; }
$ cat bar.c
void bar() { static char* x = "world"; }
$ cat a.c
extern foo(); extern bar();
int main(void) { foo(); }
$ gcc -c *.c
$ gcc a.o foo.o bar.o
$ strings a.out | egrep 'hello|world'
hello
world
$ ar r libxxx.a foo.o bar.o
ar: creating libxxx.a
$ gcc a.o libxxx.a
$ strings a.out | egrep 'hello|world'
hello
|
// Leo |
|