Как увидеть JavaDoc в IntelliJ IDEA? [Дубликат]

Этот вопрос старый, другие ответы старые. Ответ «Ответственный русский» очень хорош и информативен, но он работает только в том случае, если у вас есть исходный код. Если вы этого не сделаете, альтернативы тогда были очень сложными. К счастью, в наше время у нас есть простое решение этой проблемы (как прокомментировано в одном из его ответов), используя patchelf . Все, что вам нужно сделать, это:

$ ./patchelf --set-interpreter /path/to/newglibc/ld-linux.so.2 --set-rpath /path/to/newglibc/ myapp

И после этого вы можете просто выполнить свой файл:

$ ./myapp

Не нужно chroot или вручную редактировать двоичные файлы, к счастью , Но не забудьте сделать резервную копию своего двоичного файла, прежде чем исправлять его, если вы не уверены, что делаете, потому что он изменяет ваш двоичный файл. После этого вы не сможете восстановить старый путь к интерпретатору / rpath. Если это не сработает, вам нужно будет исправлять его до тех пор, пока не найдете путь, который действительно будет работать ... Ну, это не должен быть процесс проб и ошибок. Например, в примере OP ему понадобился GLIBC_2.3, поэтому вы можете легко найти, какая lib предоставляет эту версию, используя strings:

$ strings /lib/i686/libc.so.6 | grep GLIBC_2.3
$ strings /path/to/newglib/libc.so.6 | grep GLIBC_2.3

Теоретически первый grep пуст, потому что система libc не имеет требуемой версии, а второй должен вывести GLIBC_2.3, потому что он использует версию myapp, поэтому мы знаем, что мы можем patchelf использовать наш бинарный путь.

Когда вы пытаетесь запустить двоичный файл в Linux, двоичный файл пытается загрузить компоновщик, затем библиотеки, и все они должны быть в пути и / или в нужном месте. Если ваша проблема связана с компоновщиком, и вы хотите узнать, какой путь ищет ваш бинарный файл, вы можете узнать с помощью этой команды:

$ readelf -l myapp | grep interpreter
  [Requesting program interpreter: /lib/ld-linux.so.2]                                                                                                                                                                                   

Если ваша проблема связана с libs, команды, которые будут дайте вам используемые libs:

$ readelf -d myapp | grep Shared
$ ldd myapp 

Это приведет к отображению библиотек, которые нужны вашим двоичным файлам, но вы, вероятно, уже знаете проблемные, поскольку они уже дают ошибки, как в случае OP.

«patchelf» работает для множества различных проблем, с которыми вы можете столкнуться при попытке запустить программу, связанную с этими двумя проблемами. Например, если вы получаете: ELF file OS ABI invalid, это может быть исправлено установкой нового загрузчика (часть --set-interpreter команды), поскольку я объясняю здесь здесь . Другой пример - проблема получения No such file or directory при запуске файла, который есть и исполняемый, например здесь . В этом конкретном случае OP отсутствовала ссылка на загрузчика, но, возможно, в вашем случае у вас нет доступа root и не может создать ссылку. Настройка нового интерпретатора решит вашу проблему.

Спасибо. Занимался русским и Майклом Панковым за понимание и решение!

413
задан kc2001 16 April 2019 в 11:21
поделиться