#llvm #llvm-clang
#llvm #llvm-clang
Вопрос:
Я работаю с LLVM 8.0 и clang и выполняю некоторую работу во время оптимизации, и мне нужно получить путь к clang. Я запускаю clang, используя -flto
флаг, так что clang фактически вызывает компоновщик и, в конечном счете, мой код. Я делаю это в Ubuntu 16.04.
Я пытаюсь получить путь к изображению с помощью readlink("/proc/self/exe");
. Образ clang был собран в моей домашней папке, поэтому путь, который я указываю для запуска clang, /home/users/me/llvm/build/llvm/bin/clang
. У меня также есть версия clang, установленная в /usr/bin/clang
.
Что я получаю от вызова readlink
, так это: /usr/bin/ld
. Что я хочу получить, так это: /home/users/me/llvm/bin/clang
.
Я понимаю, что -flto
вызывает system()
с /usr/bin/ld ...
в качестве команды для запуска. Но как я могу получить clang
путь? Поскольку у меня есть несколько версий clang
, я не могу использовать whereis
или тому подобное, поскольку он вернет либо неправильный, либо несколько.
Есть ли глобальная переменная в LLVM, или какой-либо способ запроса LLVM, или какой-либо способ, который я еще не обнаружил, чтобы получить путь к изображению для родительского процесса?
Предложения по использованию getppid и использованию в «?/proc //exe» сработали отлично.
Комментарии:
1. Может быть, вы можете использовать
getppid
and thenreadlink("/proc/<ppid>/exe")
?2.
getppid
это вероятный ответ, но возможно, что нужный вам pid не является прямым родителем … было что-то в том, что clang вызывал компоновщик через кого-то? Я забыл детали. В любом случае, если вы используете Linux и хотите получить pid дедушки или другого предка, вам нужно посмотреть наPPid
поле/proc/<pid>/status
.
Ответ №1:
Предложение @Ismail было идеальным. Сделал именно то, что я хотел.