Как вы ссылаетесь на конкретную версию общей библиотеки в GCC - PullRequest
40 голосов
/ 06 мая 2009

Я компилирую код, который использует 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, чтобы он использовал любую доступную версию?

Ответы [ 4 ]

67 голосов
/ 25 июня 2013

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

27 голосов
/ 06 мая 2009

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

1 голос
/ 30 января 2017

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

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

1 голос
/ 06 мая 2009

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

...