Как вы ссылаетесь на конкретную версию общей библиотеки в GCC
Вопрос
Я собираю некоторый код, который использует 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
компоновщика.
Они не очень документированы, но должны позволять вам загружать символы из разных версий одной и той же библиотеки в соответствии с машиной, на которой вы установлены.