Мой исполняемый файл oom
, (рекурсивно) требует общей библиотеки libvpncli.so
, которая, в свою очередь, требует libvpnapi.so
.
Когда я пытаюсь связать oom
, я получаю это:
/usr/bin/ld: warning: libvpnapi.so, needed by /path/to/libvpncli.so, not found
Однако libvpncli.so
был правильно скомпилирован с опциями -rpath
, чтобы узнать, как найти libvpnapi.so
. Я проверил это вручную, а также ldd
показывает это:
$ldd /path/to/libvpncli.so
libvpnapi.so => /path/to/libvpnapi.so
Тогда почему ld
не может oom
найти libvpnapi.so
?
Изменить - ответить до н.м. Очки:
"указывает путь выполнения"
Нет. rpath
также используется во время связывания, чтобы проверить, что все символы будут разрешены. Во всяком случае, я говорю не о времени выполнения в этом вопросе, а о связывании.
Действительно, если я добавлю rpath
непосредственно к линии связи oom
, чтобы указать на libvpnapi.so
, предупреждение исчезнет.
Но я не хочу этого делать (по другим причинам). Вместо этого мне нужно понять, почему вышеописанное не работает.
"должен указывать свой каталог с помощью -rpath или (возможно, лучше) -rpath-link в командной строке при компоновке oom"
Нет. В другой системе приведенная выше схема работает , без прямого указания -rpath
на oom
линии связи, но работает косвенно, рекурсивно.
Мой вопрос: почему не всегда работает на всех системах? В чем может быть причина, почему это не работает, когда есть доказательства, что это должно, как показано в моем вопросе.