Как использовать статическую библиотеку в исполняемом файле Linux - PullRequest
0 голосов
/ 03 октября 2018

У меня есть проект, который я компилирую на Linux.Когда я запускаю команду ldd для исполняемого файла, вот что я получаю:

libevent_core-2.1.so.6 => /usr/lib/x86_64-linux-gnu/libevent_core-2.1.so.6 (0x00007fca87a5e000)
libevent_pthreads-2.1.so.6 => /usr/lib/x86_64-linux-gnu/libevent_pthreads-2.1.so.6 (0x00007fca8785b000)

Теперь я хочу, чтобы эти библиотеки компилировались как статические библиотеки.Как я могу это сделать?

Вот моя библиотека файлов make:

LIBS    = -levent_core -levent_extra -levent -levent_pthreads -lsystemd

1 Ответ

0 голосов
/ 03 октября 2018

Нет волшебства make-файла, которое превращает разделяемые библиотеки в статические.Вам необходимо установить статические версии библиотек в вашей системе, а затем в своем make-файле указать, что статические версии библиотек должны быть связаны.

Похоже, что статические библиотеки вам нужно установитьявляются:

libevent_core.a
libevent_extra.a
libevent.a
libevent_pthreads.a
libsystemd.a

Установив эти библиотеки, вы бы изменили свой make-файл, чтобы статически связать их, изменив:

LIBS    = -levent_core -levent_extra -levent -levent_pthreads -lsystemd

на:

LIBS    = -Wl,-Bstatic -levent_core -levent_extra -levent -levent_pthreads -lsystemd -Wl,-Bdynamic

Однако , вы не можете сделать это точно, потому что нет статической версии libsystemd. Вот почему .

В вашем списке есть статические версии других библиотек.Вы можете установить их, установив пакет разработки libevent (возможно, пакет libevent-dev или libevent-devel, в зависимости от вашего дистрибутива Linux).Затем вы можете статически связать их с:

LIBS    = -Wl,-Bstatic -levent_core -levent_extra -levent -levent_pthreads -Wl,-Bdynamic -lsystemd

Обратите внимание , что в -Wl,-Bstatic или -Wl,-Bdynamic нет пробелов.Параметры GCC в форме -Wl,... означают, что GCC должен передать параметры ... до вызова компоновщика.

Вот документация по параметрам компоновщика

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...