Допустим, я хочу создать динамическую библиотеку dynamic.so
, но мой код ссылается на функцию, которая существует в какой-то другой статической библиотеке static.a
.Естественно, если я скомпилирую и свяжу с g++
и опцией -shared
, dynamic.so
будет ожидать, что указанная функция будет реализована в какой-то другой динамической библиотеке, которую мне нужно будет связать во время выполнения вместе с dynamic.so
.Другими словами, он будет счастлив, пока я делаю -l static
(по модулю синтаксиса).
Но поскольку эта другая библиотека на самом деле статическая, я не могу этого сделать.Давайте предположим, что я не могу связать статическую библиотеку во время компиляции моей основной программы, но я вынужден использовать только динамические библиотеки.Поэтому я действительно хочу включить скомпилированный код из ссылочной функции из static.a
в dynamic.so
.
Этот ответ на связанный вопрос предполагает использование опции --whole-archive
длявключают static.a
в dynamic.so
.Однако в моем случае static.a
огромен.И мне действительно не нужно все это, мне нужно только одно определение функции.
Этот ответ на другой вопрос объясняет, что соединение со статической библиотекой во время компиляции означает, что толькокод, на который фактически ссылаются, включается в двоичный файл.Ну, это именно то, что я хотел бы сделать для моей ссылки на одну функцию!Я действительно не хочу, чтобы весь статический архив был там.
Но как мне этого добиться?Как я могу включить только необходимые части static.a
в dynamic.so
?