частичное связывание g ++ вместо архивов?

StackOverflow https://stackoverflow.com/questions/270984

  •  06-07-2019
  •  | 
  •  

Вопрос

Я довольно новичок в процессе сборки C ++, и я думаю о том, чтобы перейти к использованию частичной компоновки для моих библиотек вместо создания архивов ar . Я надеюсь сократить время компоновки на неизбежном последнем шаге компиляции, который у меня есть, и я полагаю, что частичное связывание некоторых библиотек однажды может сэкономить мне время по сравнению со всем, что связано на этом последнем шаге.

Возможно ли то, что я описываю? Я полагаю, что это должно быть что-то вроде ld -Ur -o mylib.o [компоненты] . Существуют ли важные аспекты сборки, которые я не принимаю во внимание?

Это было полезно?

Решение

Вы теряете важный эффект наличия объектных файлов в архиве ar , а именно то, что только ссылочные объекты будут связаны в.

Если у вас есть foo.o с символом foo и bar.o с символом bar в ar и ссылаются только на символ foo , будет связан только foo.o . Если вместо этого вы сделаете частичную ссылку, содержимое обоих окажется в итоге в исполняемом файле, даже если bar нигде не упоминается.

Вы также можете попробовать более быстрый компоновщик, например gold .

Другие советы

В другой раз вы хотите использовать ld -r для создания частичной ссылки, если у вас есть несколько объектных файлов, которые содержат статическую инициализацию, которые необходимы для обеспечения определенной функциональности, но никогда не вызываются напрямую каким-либо кодом.

Если вы хотите, я могу написать документ, который демонстрирует, как это работает и почему это работает!

(см., например, регистрацию класса C ++ во время выполнения, она использует функцию статического регистра, которая регистрирует себя в реестре, которую затем можно использовать для создания и возврата Base * с полиморфным поведением, поскольку она создала новый объект, который был унаследован из базы. См. знание классов среды выполнения C ++ , которое является ответом на вопрос, который я задал.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top