Jump to content

Problema ao compilar no eclipse (C++)


NunoV.
 Share

Recommended Posts

Olá a todos.

Estou a trabalhar no exlipse indigo e onde estou a tentar compilar um programa bastante simples em C++ onde incluo uns ficheiros .h que saqueida net. No menu do Project Explorer, se expandir a secção dos includes, aparece-me lá as funções que estou a chamar, mas quando tento compilar ele dá-me o erro "undefined reference to (função)" em todas as funções incluídas no ficheiro .h.

Podem ver aqui um screenshot do que estou a dizer:

Screen1.jpg

Sabem como posso resolver este problema? Já andei a procura na net e a testar algumas soluções mas não funcionou.

Se precisarem de alguma informação posso por aqui uns screen shots ou informação mais detalhada.

Link to comment
Share on other sites

Edit:

Incluiste os headers com as declarações das funções mas, ou não compilaste os ficheiros com as definições destas funções, ou não estás a linkar a biblioteca correcta.

Edited by doctore
Link to comment
Share on other sites

A biblioteca é esta:

https://github.com/nunoalves/BeagleBone_IO_lib

Edit:

Incluiste os headers com as declarações das funções mas, ou não compilaste os ficheiros com as definições destas funções, ou não estás a linkar a biblioteca correcta.

O que fiz foi pegar nesses ficheiro, colocar numa pasta e dizer às propriedades do projecto no eclipse e adicionei essa pasta nos includes.

Depois fiz o programa e para compilar fiz simplesmente "Project->Buil All".

Não compilei previamente a biblioteca. Como o faço?

Incluiste o ficheiro no projecto?

são publicos? Se sim, instanciaste o objecto? São static functions?

Review:

As funções não estão definidas como classes. Tens um exemplo:

#ifndef BEAGLE_HD44780_H_GUARD
#define BEAGLE_HD44780_H_GUARD
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include <time.h>
#include "BeagleBone_gpio.h"
void goto_ScreenLine(int line, struct gpioID enabled_gpio[]);
void goto_ScreenLocation(int line, int position,struct gpioID enabled_gpio[]);
unsigned int return_address_in_bitform (unsigned int address, int part);
unsigned int write_character (char character, int part);
void charToScreen(char characterToWrite, struct gpioID enabled_gpio[]);
void initialize_Screen(struct gpioID enabled_gpio[],int selectedPins[]);
void terminate_Screen(struct gpioID enabled_gpio[],int selectedPins[]);
void clear_Screen(struct gpioID enabled_gpio[]);
void enableBlinkingCursor(struct gpioID enabled_gpio[]);
void disableBlinkingCursor(struct gpioID enabled_gpio[]);
void stringToScreen(const char *full_string, struct gpioID enabled_gpio[]);
#endif

Link to comment
Share on other sites

Ora, tendo em conta que eu nunca compilei nada com c++, no entanto lembro de ter problemas com o build em java e em c#, por estar a usar j1.5 em de vez de j1.6 e a mesma coisa para o c# a compilar para NET3.5

Link to comment
Share on other sites

@NunoV.

Desculpa a resposta tardia mas esqueci-me por completo do tópico.

Penso que o teu problema resulta do facto de não estares a compilar os ficheiros BeagleBone_gpio.c e BeagleBone_hd44780.c que têm a definição das funções que estás a utilizar. Tu copiaste estes ficheiros para a directoria /home/NunoV/Downloads/include mas os mesmos não estão a ser compilados.

Uma maneira rápida de superares o problema consiste em adicionar estes dois ficheiros ao teu projecto e depois recompilar.

Recordo que não basta simplesmente copiar os ficheiros com a definição das funções (BeagleBone_gpio.c e BeagleBone_hd44780.c) tens mesmo que os adicionar ao teu projecto. Normalmente deve ser algo do género. No eclipse, na tab da esquerda Project Explorer, carregas com o botão direito no nome do projecto e escolhas a opção add existing file, ou algo do género.

Depois de compilares, o eclipse gera, na pasta do projecto, uma nova directoria chamada "build". Verifica se lá dentro se encontram ficheiros com extensão .o. Se encontrares aí os ficheiros BeagleBone_gpio.o e BeagleBone_hd44780.o isso significa que os ficheiros foram compilados.

Link to comment
Share on other sites

Obg.

Como não consegui fazer com o eclipse, acabei por compilar na linha de comandos. É um bocado mais chato.

Vou tentar dessa maneira e depois dou feedback!



@NunoV.

Desculpa a resposta tardia mas esqueci-me por completo do tópico.

Penso que o teu problema resulta do facto de não estares a compilar os ficheiros BeagleBone_gpio.c e BeagleBone_hd44780.c que têm a definição das funções que estás a utilizar. Tu copiaste estes ficheiros para a directoria /home/NunoV/Downloads/include mas os mesmos não estão a ser compilados.

Uma maneira rápida de superares o problema consiste em adicionar estes dois ficheiros ao teu projecto e depois recompilar.

Recordo que não basta simplesmente copiar os ficheiros com a definição das funções (BeagleBone_gpio.c e BeagleBone_hd44780.c) tens mesmo que os adicionar ao teu projecto. Normalmente deve ser algo do género. No eclipse, na tab da esquerda Project Explorer, carregas com o botão direito no nome do projecto e escolhas a opção add existing file, ou algo do género.

Depois de compilares, o eclipse gera, na pasta do projecto, uma nova directoria chamada "build". Verifica se lá dentro se encontram ficheiros com extensão .o. Se encontrares aí os ficheiros BeagleBone_gpio.o e BeagleBone_hd44780.o isso significa que os ficheiros foram compilados.

Já deu...

Obrigado. Já tinha tentado quase tudo menos incluir lá os ficheiros.

Já tinha percebido que o problema era que o compilador não estava a compilar a biblioteca. Tinha andado à procura nas opções como o fazer mas não encontrei. Pensei que bastasse adicionar a pasta nos "includes" defenido nas propiedades

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.