Проблемы включения RTTI в JL-коде LLVM - PullRequest
0 голосов
/ 28 января 2019

Я пишу код C ++ в приложении Windows.Я использую LLVM / CLang 5.0, и приложение было скомпилировано с использованием MsVc 2015.

Хотя библиотеки DLL и исполняемый код, созданные с помощью двух наборов инструментов, очень хорошо сочетаются и совпадают, у меня возникают проблемы с JIT-тедомкод, который не включает переменные, которые LLVM должен генерировать автоматически, например, ??_7type_info@@6B@, и связанные с ними вещи, например, \01??_R0H@8.Они зарегистрированы только как внешние, и любое их использование приведет к сбою приложения с

LLVM ERROR: Program used external function '??_7type_info@@6B@' which could not be resolved!

. Хотя я нашел примеры добавления пользовательских переменных в код JIT-ted, я не смог найти эффективныйРешения проблемы создания кода JIT относятся к этим внутренним переменным, которые генерируются за кулисами.

Я полагаю, что мог бы предоставить недостающие переменные через DLL, скомпилированную с CLang, с настройкой .ll, но я бы предпочел более чистое решение, просто сконфигурировав движок JIT-ter.

Кто-нибудь может мне помочь, пожалуйста?

1 Ответ

0 голосов
/ 31 января 2019

?? _ 7type_info @@ 6B @ - искаженное имя виртуальной таблицы для класса std :: type_info, которое предоставляется одной или другой статической библиотекой MSVC, которая неявно связывается, например:

c: / Program Files (x86) / Microsoft Visual Studio / 2017 / Professional / VC / Tools / MSVC / 14.15.26726 / lib / x64 / msvcrt.lib

Чтобы исправить ошибку поиска LLVM, которую вы можете экспортироватьэтот символ из вашей собственной DLL или EXE, и вы можете сделать это из своего кода C ++, например:

#pragma comment(linker, "/export:??_7type_info@@6B@")

См. также https://docs.microsoft.com/en-us/cpp/build/reference/export-exports-a-function?view=vs-2017

Возможно, вам также придется вызвать утилитуФункция ниже, чтобы убедиться, что все ваши символы видны LLVM

llvm :: sys :: DynamicLibrary :: LoadLibraryPermanently (nullptr);

Не уверен, если это строго необходимо в этом случае, но рекомендуетсяс помощью учебника по компилятору LLVM JIT.

...