2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Библиотеки и объектные файлы
Сообщение19.09.2018, 06:24 


06/04/18

323
Статические библиотеки ведь тоже представлены в виде объектного кода. Тогда зачем два различных расширения: .a для статических библиотек (в линуксах) и .o для объектных файлов? И в чем разница?

 Профиль  
                  
 
 Re: Библиотеки и объектные файлы
Сообщение19.09.2018, 08:36 


11/12/14
893
.o - это объектный файл модуля компиляции
.a - это коллекция объектных файлов упакованных в один файл для удобства, таким образом .a это просто контейнер для модулей компиляции, составляющих единую по смыслу и применению библиотеку. линкер обладает способностью определять какие функции из какого модуля .o внутри .a использует компилируемая программа и подключать только эти .o-шки к получающемуся коду. то есть это двойное удобство - не нужно перечислять в командой строке компилятору сотни модулей которые он использует из одной монолитной библиотеки.
.so - динамические библиотеки, но насколько я помню в линуксах разница между ними и .o весьма тонка и по большей части сводится к внутренним оптимизациям и выкидывании ненужной информации.

 Профиль  
                  
 
 Re: Библиотеки и объектные файлы
Сообщение19.09.2018, 11:18 
Заслуженный участник


09/05/12
25179
aa_dav в сообщении #1340081 писал(а):
.so - динамические библиотеки, но насколько я помню в линуксах разница между ними и .o весьма тонка и по большей части сводится к внутренним оптимизациям и выкидывании ненужной информации.
В общем, да, можно разве что добавить нюансы.

В *.o содержатся данные для связи с другими модулями и может содержаться отладочная информация. *.so - разделяемые библиотеки, которые могут одновременно (в т.ч. и в буквальном смысле) использоваться разными исполняемыми файлами. Ну и, вообще говоря, они в некотором смысле сами являются исполняемыми файлами, некоторые можно даже запустить. :-)

 Профиль  
                  
 
 Re: Библиотеки и объектные файлы
Сообщение15.01.2019, 05:02 


06/04/18

323
А верно ли, что все компиляторы преобразуют код в одно и то же объектное представление? Проблема такая: есть скомпилированный С++ код в виде библиотеки или объектника, и есть мой исходный код, написанный на другом языке (не C++). Можно ли всё это связать в один исполняемый файл?

 Профиль  
                  
 
 Re: Библиотеки и объектные файлы
Сообщение15.01.2019, 07:00 
Заслуженный участник
Аватара пользователя


30/01/06
72407
1. Формат объектного файла одинаковый, скорее всего.
2. Соглашения о вызове (calling convention) могут быть разные.
3. В C++ есть ещё дополнительные соглашения о name mangling ("манглинге имён"), которые тоже надо учитывать.
    3.1. Если используются средства C++ типа шаблонов или обработки исключений, то шансов связаться с этим кодом из другого языка практически нет.

В целом, лучше всего прочитать руководство о том, как связываться из вашего (анонимного) языка с C/C++, и как связываться с имеющейся у вас библиотекой, например, из pure C.

 Профиль  
                  
 
 Re: Библиотеки и объектные файлы
Сообщение15.01.2019, 08:38 


27/08/16
9426
Qlin в сообщении #1368776 писал(а):
А верно ли, что все компиляторы преобразуют код в одно и то же объектное представление?
Нет, это неверно. Существуют различные форматы объектных файлов. Но системные библиотеки для конкретной операционной системы обычно представлены в одном определённом формате, он и используется как правило в этой системе всеми компиляторами, компилирующими для этой системы код.

 Профиль  
                  
 
 Re: Библиотеки и объектные файлы
Сообщение15.01.2019, 11:26 
Аватара пользователя


31/10/08
1244
1. Разные COFF, OMF, ELF
2. Разные компиляторы для одного формата генерируют разные имена. А ещё релоки разные (разные способы кодирования база независимого кода). В стандарте перечислены все способы, но линкеры поддерживают не все.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group