Как вы ссылаетесь на конкретную версию общей библиотеки в GCC

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

  •  06-07-2019
  •  | 
  •  

Вопрос

Я собираю некоторый код, который использует libcurl в системе Debian Linux. Моя машинная машина работает под управлением Debian 5, но я хочу, чтобы двоичный файл можно было использовать и в старых системах Debian 4.

Я считаю, что если я укажу -lcurl , он будет ссылаться на libcurl.so.4, но в системах Debian 4 есть только libcurl.so.3

Есть ли какой-нибудь способ, которым я могу сказать GCC, чтобы он ссылался либо на libcurl.so.3 (который существует как в Debian 4, так и на 5), либо просто на libcurl.so, чтобы он использовал любую доступную версию?

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

Решение

Вы можете передать фактический файл .so вместо -l в командной строке компоновщика, и он должен делать то, что вы хотите.

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

Вместо использования -lcurl " используйте " -l: libcurl.so.3 " И, конечно же, используйте " -L _installed_path_ "

Как насчет создания символической ссылки, локальной для вашего проекта, которая ссылается на .3, тогда вы можете просто использовать -L во время компиляции. Я не уверен, что вы получите конфликт имен, но вы всегда можете назвать его libcurl-old.so на всякий случай.

Я думаю, что правильный способ сделать это - использовать флаги - filter и - Additional компоновщика.

Они не очень документированы, но должны позволять вам загружать символы из разных версий одной и той же библиотеки в соответствии с машиной, на которой вы установлены.

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