Создайте GlobalVariable, который имеет extern в одном заголовочном файле - PullRequest
0 голосов
/ 22 февраля 2019

Добрый день.У меня проблема с созданием GlobalVariable.У меня уже есть extern для этого глобала в заголовочном файле, чтобы использовать его следующим образом

extern const void* DATA_TABLE[];

И с LLVM PASS я пытаюсь создать этот массив с тем же именем и с инициализатором.Итак, у меня есть следующее:

GlobalVariable *gvar_data = new GlobalVariable(
    M, blockItems->getType(), true, GlobalValue::CommonLinkage,
    blockItems, "DATA_TABLE");
gvar_data->setAlignment(16);
gvar_data->setSection("data_section");
gvar_data->addAttribute(llvm::Attribute::OptimizeNone);

Я не уверен, правильно ли я использую Linkage или нет.Пропуск не удалось завершить.Здесь ошибка во время выполнения.Есть предположения, что я делаю неправильно?

'common' global must have a zero initializer!
[10 x i8*]* @DATA_TABLE.1
LLVM ERROR: Broken module found, compilation aborted:::::::::!

1 Ответ

0 голосов
/ 22 февраля 2019

Если вы не вызываете setInitializer () , глобальная переменная, которую вы делаете, является внешней.Есть функция, которая будет предоставлять инициализатор со всеми нулями для типа, который вы предоставляете, я не помню его имя от руки, или вы можете сделать подходящий инициализатор самостоятельно, используя такие классы, как ConstantStruct ,ConstantInt и их братья и сестры.

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