Bibliotecas e Interfaces

Q: Se tiver uma biblioteca libteste.a compilada a partir do a.h e do b.h e um programa que a usa fazendo include ao a.h e b.h, não consigo compilar o programa sem ter os .h originais?

R: Se o programa cliente usa os nomes a.h e b.h, então eles têm de existir (mesmo que não sejam os originais). Em geral, a interface (.h) de uma biblioteca é independente do código utilizado na sua produção: podem existir .h (C/C++) para bibliotecas produzidas a partir de Fortran, por exemplo. Um exemplo concreto é a interface para o standard I/O do C: em C está acessível via "stdio.h" e em C++ via "cstdio".

Compilação e localização de expression_type

Q: Ao executar "make" para construir o projecto, estou a ter o seguinte erro:

/usr/include/cdk/ast/expression.h:47:38: fatal error: semantics/expression_type.h: No such file or directory
compilation terminated.
make: *** [MFParser.tab.o] Error 1

Que se passa?

R: O problema ocorre devido ao valor incorrecto de uma variável no ficheiro Makefile do projecto. O valor da variável ROOT deve ser definido como se segue:

ROOT =

(ou seja, a variável tem de ser definida sem qualquer valor)

Compilação e undefined referente to vtable

Q: Estou a compilar o projecto e ocorre o erro: "undefined referente to vtable" na class basic_ast_visitor. Que se está a passar?

R: O erro ocorre no projecto, geralmente na hierarquia dos "visitors", devido a não terem sido definidos todos os métodos declarados nos "visitors". Note-se que não basta declará-los no cabeçalho da classe: é necessário definir os seus corpos, mesmo que sejam vazios.