2014 dxdy logo

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

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




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

 
 
 
 Re: Библиотеки и объектные файлы
Сообщение19.09.2018, 08:36 
.o - это объектный файл модуля компиляции
.a - это коллекция объектных файлов упакованных в один файл для удобства, таким образом .a это просто контейнер для модулей компиляции, составляющих единую по смыслу и применению библиотеку. линкер обладает способностью определять какие функции из какого модуля .o внутри .a использует компилируемая программа и подключать только эти .o-шки к получающемуся коду. то есть это двойное удобство - не нужно перечислять в командой строке компилятору сотни модулей которые он использует из одной монолитной библиотеки.
.so - динамические библиотеки, но насколько я помню в линуксах разница между ними и .o весьма тонка и по большей части сводится к внутренним оптимизациям и выкидывании ненужной информации.

 
 
 
 Re: Библиотеки и объектные файлы
Сообщение19.09.2018, 11:18 
aa_dav в сообщении #1340081 писал(а):
.so - динамические библиотеки, но насколько я помню в линуксах разница между ними и .o весьма тонка и по большей части сводится к внутренним оптимизациям и выкидывании ненужной информации.
В общем, да, можно разве что добавить нюансы.

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

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

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

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

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

 
 
 
 Re: Библиотеки и объектные файлы
Сообщение15.01.2019, 11:26 
Аватара пользователя
1. Разные COFF, OMF, ELF
2. Разные компиляторы для одного формата генерируют разные имена. А ещё релоки разные (разные способы кодирования база независимого кода). В стандарте перечислены все способы, но линкеры поддерживают не все.

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group