17/06/17 18:55
TheDarkJuster
Buona sera, ho un progetto (molto bizzarro) che punta a diventare un frontend per llvm di un linguaggio molto strano.
Al momento ho un lexer funzionante, e mi accingo a scrivere il parser, solo che vengo bloccato da un errore in false di linking:
La classe ExpressionFunction eredita da Expression, e sono così definite:
e per entrambe ho dichiarato ogni funzione/costruttore:
Cosa puo' causare quell'orrore in fase di linking? Trovate il sorgente completo a questo indirizzo: github.com/NeroReflex/…
P.S. l'errore in fase di link è lo stesso sia usando il linker di llvm sia ld
Al momento ho un lexer funzionante, e mi accingo a scrivere il parser, solo che vengo bloccato da un errore in false di linking:
[ 98%] Linking CXX executable ../../bin/compiler ../../lib/libSeaDragon.so: undefined reference to `vtable for SeaDragon::Development::AST::ExpressionFunction' collect2: error: ld returned 1 exit status src/compiler/CMakeFiles/compiler.dir/build.make:105: recipe for target 'bin/compiler' failed make[3]: *** [bin/compiler] Error 1 CMakeFiles/Makefile2:447: recipe for target 'src/compiler/CMakeFiles/compiler.dir/all' failed make[2]: *** [src/compiler/CMakeFiles/compiler.dir/all] Error 2 CMakeFiles/Makefile2:459: recipe for target 'src/compiler/CMakeFiles/compiler.dir/rule' failed make[1]: *** [src/compiler/CMakeFiles/compiler.dir/rule] Error 2 Makefile:220: recipe for target 'compiler' failed make: *** [compiler] Error 2
La classe ExpressionFunction eredita da Expression, e sono così definite:
class Expression { public: Expression(); Expression(std::vector<Token> &tkList); virtual void GenerateCode(); virtual ~Expression(); }; class ExpressionFunction : public Expression { using Expression::Expression; public: ExpressionFunction(std::vector<Token> &tkList); virtual void GenerateCode(); virtual ~ExpressionFunction(); };
e per entrambe ho dichiarato ogni funzione/costruttore:
ExpressionFunction::ExpressionFunction(std::vector<Token> &tkList) { } ExpressionFunction::~ExpressionFunction() { } Expression::Expression() { throw Exception((const char *)"Unimplemented"); } Expression::Expression(std::vector<Token> &tkList) { throw Exception((const char *)"Unimplemented"); } void Expression::GenerateCode() { throw Exception((const char *)"Unimplemented"); } Expression::~Expression() { }
Cosa puo' causare quell'orrore in fase di linking? Trovate il sorgente completo a questo indirizzo: github.com/NeroReflex/…
P.S. l'errore in fase di link è lo stesso sia usando il linker di llvm sia ld
Ultima modifica effettuata da TheDarkJuster 17/06/17 19:03
aaa