Что такое флаг g ++, разрешающий неопределенные ссылки в общих библиотеках?

Я помню, как читал, что это за флаг в какой-то момент в Интернете, но сейчас я забыл.

Я пишу разделяемую библиотеку и хочу, чтобы моя библиотека разрешала неопределенные ссылки. Таким образом, тот, кто использует мою библиотеку, должен ссылаться на нее а также ссылка против его зависимостей. Какой флаг на g ++ разрешает это? Или, может быть, это флаг компоновщика?

1

Решение

Это может быть только флаг компоновщика … и затем, это зависит от того, какой компоновщик вы используете.
На Linux (и, вероятно, BSD, по крайней мере, FreeBSD) это должно быть поведение по умолчанию. Хотя не на Mac.

От GNU ld справочная страница:

--allow-shlib-undefined
--no-allow-shlib-undefined
Allows 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 default behaviour is to report errors for any undefined symbols
referenced in shared libraries if the linker is being used to create an
executable, but to allow them if the linker is being used to create a
shared library.

От яблоко ld справочная страница:

-undefined treatment
Specifies how undefined symbols are to be treated. Options
are: error, warning, suppress, or dynamic_lookup.  The
default is error.
3

Другие решения

Просто не связывайте свою общую библиотеку с зависимыми библиотеками, вот и все.

По умолчанию при связывании общей библиотеки разрешены неопределенные ссылки. Теперь, если вы явно свяжете вашу разделяемую библиотеку с ее зависимостями, загрузчик времени выполнения автоматически загрузит эти зависимости. Если вы явно не связываете свою разделяемую библиотеку с ее зависимостями, то для связи с вашей разделяемой библиотекой потребуется связать ее с зависимостями, чтобы разрешить все неопределенные ссылки.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector