У меня есть команда c++filt
для демонтажа символа, что это за инструмент, чтобы сделать наоборот и исказить имя символа?
Это было бы полезно, если бы я захотел вызвать dlsym()
для искаженного имени функции C++.Я бы предпочел не жестко кодировать искажение имени в коде, поскольку оно может меняться со временем из-за новых версий компиляторов или новых брендов компиляторов или в настоящее время из-за компиляции для нескольких платформ.
Есть ли программный способ получить строку, представляющую функцию С++ во время выполнения, чтобы код не зависел от компилятора? Одним из способов сделать это может быть вызов утилиты во время компиляции, которая выполняет изменение имени для используемого компилятора и вставляет соответствующее искаженное имя символа C++ в строку для использования dlsym()
.
Вот самое близкое к решению, которое я нашел на этом сайте , которое достигается за счет использования фиксированного имени стиля C для косвенных символов C++, которые определены в библиотеке, которую вы хотите dlsym()
, но если вы этого не сделаете, иметь контроль над тем, что предоставляет эта библиотека, это не вариант.