почему бы не использовать рекурсивную ld rpath? - PullRequest
0 голосов
/ 28 августа 2018

Мой исполняемый файл 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 линии связи, но работает косвенно, рекурсивно.

Мой вопрос: почему не всегда работает на всех системах? В чем может быть причина, почему это не работает, когда есть доказательства, что это должно, как показано в моем вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...