Ответ 1
Добавьте это в свою командную строку:
-D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS
Дополнительные сведения о параметре командной строки -D
см. в документации gcc по опциям препроцессора.
Я пытаюсь выполнить учебник в http://gnuu.org/2009/09/18/writing-your-own-toy-compiler/5/ (используя flex, bison и llvm), но при вводе строки
g++ -o parser parser.cpp tokens.cpp main.cpp
Я получаю следующие ошибки:
In file included from /usr/local/include/llvm/Support/PointerLikeTypeTraits.h:18:0,
from /usr/local/include/llvm/ADT/PointerIntPair.h:17,
from /usr/local/include/llvm/IR/Use.h:28,
from /usr/local/include/llvm/IR/Value.h:17,
from node.h:3,
from parser.y:2:
/usr/local/include/llvm/Support/DataTypes.h:48:3: erreur: #error "Must #define __STDC_LIMIT_MACROS before #including Support/DataTypes.h"
/usr/local/include/llvm/Support/DataTypes.h:52:3: erreur: #error "Must #define __STDC_CONSTANT_MACROS before " "#including Support/DataTypes.h"
parser.y: In function ‘void yyerror(const char*)’:
parser.y:6:58: erreur: ‘printf’ was not declared in this scope
In file included from /usr/local/include/llvm/Support/PointerLikeTypeTraits.h:18:0,
from /usr/local/include/llvm/ADT/PointerIntPair.h:17,
from /usr/local/include/llvm/IR/Use.h:28,
from /usr/local/include/llvm/IR/Value.h:17,
from node.h:3,
from tokens.l:3:
/usr/local/include/llvm/Support/DataTypes.h:48:3: erreur: #error "Must #define __STDC_LIMIT_MACROS before #including Support/DataTypes.h"
/usr/local/include/llvm/Support/DataTypes.h:52:3: erreur: #error "Must #define __STDC_CONSTANT_MACROS before " "#including Support/DataTypes.h"
In file included from /usr/local/include/llvm/Support/PointerLikeTypeTraits.h:18:0,
from /usr/local/include/llvm/ADT/PointerIntPair.h:17,
from /usr/local/include/llvm/IR/Use.h:28,
from /usr/local/include/llvm/IR/Value.h:17,
from node.h:3,
from main.cpp:2:
/usr/local/include/llvm/Support/DataTypes.h:48:3: erreur: #error "Must #define __STDC_LIMIT_MACROS before #including Support/DataTypes.h"
/usr/local/include/llvm/Support/DataTypes.h:52:3: erreur: #error "Must #define __STDC_CONSTANT_MACROS before " "#including Support/DataTypes.h"
Я видел много сообщений, подобных этому в Интернете, и большинство ответов включают определение этих констант в командной строке или с помощью gcc Makefile.
Я не понимаю, как это сделать, может ли кто-нибудь помочь мне?
Добавьте это в свою командную строку:
-D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS
Дополнительные сведения о параметре командной строки -D
см. в документации gcc по опциям препроцессора.
В соответствии с документами здесь, вы должны устранить проблему, добавив следующие параметры командной строки:
-D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS
Впоследствии могут возникнуть некоторые другие ошибки:
parser.o: В функции
NInteger::NInteger(long long)': parser.cpp:(.text._ZN8NIntegerC2Ex[_ZN8NIntegerC5Ex]+0x23): undefined reference to
vtable для NInteger ' parser.o: В функцииNDouble::NDouble(double)': parser.cpp:(.text._ZN7NDoubleC2Ed[_ZN7NDoubleC5Ed]+0x24): undefined reference to
vtable для NDouble '
Попробуйте реализовать каждый codeGen в каждом классе без материала llvm
(т.е. изменить node.h
). Затем вы сможете скомпилировать и запустить учебник.
Кстати, когда вы компилируете код, вы можете использовать команду llvm-config
, чтобы получить опцию вместо опции -D
:
g++ -c `llvm-config --cppflags` xxxx.cpp