Пропускать разрешение символов во время компиляции при создании общих библиотек Linux с зависимостями - PullRequest
3 голосов
/ 26 февраля 2010

Существует ли флаг gcc для пропуска разрешения символов компоновщиком во время компиляции при создании разделяемой библиотеки (которая зависит от других разделяемых библиотек)? По какой-то причине мой инструментарий выдает undefined reference ошибок, когда я пытаюсь создать разделяемую библиотеку C, которая зависит от B.so и A.so, даже если зависимости указаны и существуют. Я слышал, что существует флаг gcc для отсрочки разрешения зависимости до времени выполнения.

1 Ответ

2 голосов
/ 26 февраля 2010

Я думаю, что вы ищете --allow-shlib-undefined. Из справочной страницы ld :

--allow-shlib-undefined
--no-allow-shlib-undefined
    Allows (the default) or disallows undefined symbols in shared libraries. 
    This switch is similar to --no-undefined except that it determines the 
    behaviour when the undefined symbols are in a shared library rather than 
    a regular object file. It does not affect how undefined symbols in regular
    object files are handled.

    The reason that --allow-shlib-undefined is the default is that the shared
    library being specified at link time may not be the same as the one that 
    is available at load time, so the symbols might actually be resolvable at 
    load time. Plus there are some systems, (eg BeOS) where undefined symbols 
    in shared libraries is normal. (The kernel patches them at load time to 
    select which function is most appropriate for the current architecture. 
    This is used for example to dynamically select an appropriate memset 
    function). Apparently it is also normal for HPPA shared libraries to have
    undefined symbols.

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

...