Ответ 1
Вы можете передать фактический .so файл вместо -l в командной строке компоновщика, и он должен делать то, что вы хотите.
Я компилирую код, который использует libcurl в системе Debian Linux. Моя машина Dev работает под управлением 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
и --auxiliary
компоновщика.
Они не очень документированы, но должны позволять вам загружать символы из разных версий одной и той же библиотеки в соответствии с установленной вами машиной.