Linux динамическое и статическое связывание

0

У меня есть исполняемый файл, который связан с общей библиотекой "A", которая, в свою очередь, использует общую библиотеку "B" (GUI, написанную в Qt). Когда я компилирую исполняемый файл, компоновщик ищет все библиотеки, включая "B", и все библиотеки, в которых он нуждается (библиотеки Qt). Как я могу отключить библиотеку "B" от исполняемого файла таким образом, что ему не понадобится "B" в времени ссылки. Мне бы хотелось, чтобы исполняемый файл не знал о библиотеке "B".

  • 3
    Почему? Как будет работать ваш исполняемый файл, если у него нет зависимостей?
  • 0
    Сделайте A нагрузку B во время выполнения или загрузку A во время выполнения. Это сделает ваше приложение более сложным и подверженным ошибкам, но будет работать.
Показать ещё 2 комментария
Теги:
qt
shared-libraries

1 ответ

1

Предполагая, что вы можете построить зависимость "B" от источника, вы можете скрыть ее от своего исполняемого файла, привязав "A" к "B".

В случае невозможности компиляции "B" из источника, можно ограничить видимость символов в "B", которые явно не используются. Вы можете выполнить это через команду "ld" в Unix-системах. Я об этом мало знаю. Этот пост может предложить некоторые предложения. Однако они кажутся мне очень ясными и ручными, поэтому, вероятно, менее применимы, если "B" - большая библиотека со многими символами. Я подозреваю, что на самом деле ты не идешь.

Вы хотите, чтобы "B" не отображался при вызове команды "ldd" в вашем исполняемом файле. Это правильно?

Или вы только пытаетесь упростить установку вашего исполняемого файла для пользователей? Если да, вы все равно можете автоматизировать установку в некоторой степени.

  • 0
    Моя цель - возможность компилировать и запускать исполняемый файл только с объектом A без B на машинах, где пользовательский интерфейс не нужен и Qt не установлен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню