Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è uno smartphone che unisce una fotocamera molto più versatile rispetto al passato grazie allo zoom ottico 5x, il supporto magnetico Pixelsnap e il nuovo chip Tensor G5. Il dispositivo porta Android 16 e funzionalità AI avanzate come Camera Coach, mantenendo il design caratteristico della serie Pixel con miglioramenti nelle prestazioni e nell'autonomia. In Italia, però, mancano diverse feature peculiari basate sull'AI.
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-03-2006, 15:43   #1
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
[C] Problemi di compilazione

Ciao...

Allora ho un progetto da fare per l'università è mi hanno fornito tutta la gerarchia delle directory che si presenta in questo modo:

Codice:
DBF/
       doc/       contiene la documentazione relativa al progetto
       include/   contiene un header da includere in tutti i moduli del progetto
       Modulo1/  il modulo che devo compilare
       Modulo2/
       Modulo3/
       Modulo4/
       obj/         una volta compilato un modulo qui andrà il file .o della gest. errori
       src/         c'è il sorgente della funzione che gestisce gli errori
Per compilare devo entrare nella cartella Modulo1 e digitare make test. La cartella Modulo1 si presenta così:

Codice:
Modulo1/
           doc/   documentazione inerente questo Modulo
           include/   ci va un header che creo per contenere costanti, struct e prototipi di funzione
           lib/     dopo la compilazione ci aggiunge il file Modulo1.a
           obj/    dopo la compilazione ci aggiunge i file .o dei sorgenti da me creati
           src/    sorgenti da me creati
           test/   qui dentro ci sono le funzioni per testare la funzionalità dei miei sorgenti
           makefile   penso che sappiate tutti cosa sia :)
Praticamente entro dentro la cartella Modulo1, lancio make test e poi dovrei andare nella cartella test e lanciare ./TestM1 (creato durante la fase di compilazione), solamente che mi dice sempre "Permission Denied" (sia se sono root che user normale) e la cosa strana è che ha anche i permessi di esecuzione

Da cosa può dipendere questo comportamento?

Grazie.
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 24-03-2006, 16:14   #2
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Se può esservi utile vi faccio vede come è fatto il makefile:

Codice:
####################
# Comandi e flags
AR=ar
CC=gcc
DEBUG=-g
CCFLAGS= -c $(DEBUG)
ARFLAGS= rc

# Directories
SRCDIR=src
OBJDIR=obj
LIBDIR=lib
TESTDIR=test
ERROBJDIR=../obj
ERRSRCDIR=../src

# Include e altre libs
INCLUDE=-I include -I ../include
LIBS =  

# Elementi da creare
LIBMODULE = Modulo1.a
TESTEXE = TestM1

# Elementi da utilizzare
OBJS =  $(OBJDIR)/LPC_Common.o $(OBJDIR)/LPC_CreateDBF.o $(OBJDIR)/LPC_DeleteDBF.o
TESTOBJ = $(TESTDIR)/TestM1.o
ERROBJ=$(ERROBJDIR)/LPC_Err.o

TARGET=$(LIBDIR)/$(LIBMODULE)
TEST=$(TESTDIR)/$(TESTEXE)

# Dipendenze
$(OBJDIR)/%.o : $(SRCDIR)/%.c
	$(CC) $(CCFLAGS) $(INCLUDE) $< -o $@

$(TESTDIR)/%.o : $(TESTDIR)/%.c
	$(CC) $(CCFLAGS) $(INCLUDE) $< -o $@

$(ERROBJDIR)/%.o : $(ERRSRCDIR)/%.c
	$(CC) $(CCFLAGS) $(INCLUDE) $< -o $@

# Target

$(TARGET): $(OBJS)
	$(AR) $(ARFLAGS) $@ $?

$(TEST): $(TESTOBJ) $(ERROBJ) $(TARGET)
	$(CC) $(TESTOBJ) $(ERROBJ) $(TARGET) -o $(TEST)


all: $(TARGET) $(TEST)

module: $(TARGET)

test: $(TEST)

clean: 
	rm -f $(OBJS)
	rm -f $(TARGET)
	rm -f $(TEST)
	rm -f $(TESTOBJ)
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 24-03-2006, 16:24   #3
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Ho risolto. Ho fatto partire il progetto dalla partizione dove ho installato Linux (mentre prima lo facevo partire su una partizione FAT32) ed ora va. Grazie lo stesso
Manugal è offline   Rispondi citando il messaggio o parte di esso
Old 24-03-2006, 19:34   #4
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
Senza che apro un nuovo thread (perché tanto sempre di compilazione si tratta ) avevo bisogno di un aiuto riguardo la compilazione del mio progetto. Allora vi posto sia il codice della funzione che testa il mio codice sia il mio codice.

Test:
Codice:
void TestCreate(void)
{
	int ret= 0;
	int NumFields = 0;
	FILE *fp;
	FIELD_DATA_t FieldData[MAX_NUM_FIELDS];
	int len, len1;
	char buf[500], buftest[500];

// Verifica correttezza
	test[numtest].testid = 10113;
	test[numtest].weight = 10;
	strcpy(test[numtest].desc, "CREATE: Verifica correttezza");
	printf("Test:[%d] Peso:[%d] - [%s]\n", test[numtest].testid, test[numtest].weight,test[numtest].desc);
	for(;;)
	{
		ret = -1;

		fp = fopen("ProvaTest.dbf", "r");
		len = fread(buftest, sizeof(char), 500, fp);
		fclose(fp);

		fp = fopen("Prova.dbf", "r");
		len1 = fread(buf, sizeof(char), 500, fp);
		fclose(fp);
		if (len1 != len)
			break;

		// Confronto la prima parte (prima del timestamp)
		len = DBF_NAME_LENGTH+1+2+4+2+2;
		if (memcmp(buf, buftest, len))
			break;

		// Confronto la seconda parte (dopo il timestamp)
		if (memcmp(buf+len+4, buftest+len+4, len1-len-4))
			break;

		ret = LPC_OK;
		break;
	}
	if (ret == LPC_OK)
		test[numtest].passed = 1;
	numtest++;

	Result("CREATE");

}
Mio codice: (lo posto per intero cmq dovrebbe servire solo l'ultima parte dalla fwrite in poi)

Codice:
#include "LPC_M1_Include.h"
#include "LPC_Include.h"
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>

int CreateDatabaseFile(char *Name, int NumFields, FIELD_DATA_t *FieldData){
    int test;
    int i;
    char *finale;
    header *h;
    Name=(char *)malloc(sizeof(char)*DBF_NAME_LENGTH);
    FieldData=(FIELD_DATA_t *)malloc(sizeof(FIELD_DATA_t));
    if((Name==NULL) || (cercaErr(Name)==1)){
       char Err1[256];
       (void) sprintf(Err1, "Nome DB nullo o non valido o NumFields<=0");
       LPC_GestioneErrore(LPC_BAD_ARG, "CreateDatabaseFile", Err1);
       return LPC_BAD_ARG;
    }
    if((NumFields<=0) || (NumFields>MAX_NUM_FIELDS)){
       char Err10[256];
       (void) sprintf(Err10, "Nome DB nullo o non valido o NumFields<=0");
       LPC_GestioneErrore(LPC_BAD_ARG, "CreateDatabaseFile", Err10);
       return LPC_BAD_ARG;
    }
    h=(header *)malloc(sizeof(header)*(DBF_FIXED_HEADER_LEN+MAX_NUM_FIELDS*(DBF_FIELD_LEN+MAX_NUM_FIELDS)+2));
    if(h==NULL){
       char Err4[256];
       (void) sprintf(Err4, "Errore allocazione memoria");
       LPC_GestioneErrore(LPC_NO_MEMORY, "CreateDatabaseFile", Err4);
       return LPC_NO_MEMORY;
    }
    if(strlen(Name)>DBF_NAME_LENGTH+1)
       Name[DBF_NAME_LENGTH+1]='\0';
    finale=strcat(Name,DBF_EXTENSION);
    if((test=access(finale,F_OK))==0){
       char Err2[256];
       (void) sprintf(Err2, "File DBF già esistente");
       LPC_GestioneErrore(LPC_FILE_EXISTS, "CreateDatabaseFile", Err2);
       return LPC_FILE_EXISTS;
    }
    FILE *fp=fopen(strcat(Name,DBF_OPEN_EXT),"wb+");
    if(fp==NULL){
       char Err3[256]; 
       (void) sprintf(Err3, "Errore allocazione memoria");
       LPC_GestioneErrore(LPC_NO_MEMORY, "CreateDatabaseFile", Err3);
       return LPC_NO_MEMORY;
    }
    h->NumCampi=(uint16_t) htons(h->NumCampi);
    h->NumCampi=NumFields;
    h->NumRecords=(uint32_t) htonl(h->NumRecords);
    h->NumRecords=0;
    h->dimHeader=(uint16_t) htons(h->dimHeader);
    h->dimHeader=DBF_FIXED_HEADER_LEN+NumFields*(DBF_FIELD_LEN+NumFields)+2;
    h->dimRecord=(uint16_t) htons(h->dimRecord);
    h->dimRecord=0;
    h->timestamp=(uint32_t) htonl(h->timestamp);
    h->timestamp=time(NULL);
    for(i=0; i<NumFields; ++i){
       if(cercaErr(FieldData->Name)==1){
          char Err5[256]; 
          (void) sprintf(Err5, "Valore di uno dei campi non valido: nome, tipo o lunghezza");
          LPC_GestioneErrore(LPC_BAD_FIELD, "CreateDatabaseFile", Err5);
          return LPC_BAD_FIELD;
       }
       if(StringaUguale(FieldData->Name,h,i)==1){
          char Err8[256]; 
          (void) sprintf(Err8, "Valore di uno dei campi non valido: nome, tipo o lunghezza");
          LPC_GestioneErrore(LPC_BAD_FIELD, "CreateDatabaseFile", Err8);
          return LPC_BAD_FIELD;
       }
       strcpy(h->campo[i].name,FieldData->Name);   
       if ((FieldData->FieldType!=CHARACTER) || (FieldData->FieldType!=NUMERIC) || (FieldData->FieldType!=DATE) || (FieldData->FieldType!=LOGICAL)){
          char Err6[256];
          (void) sprintf(Err6, "Valore di uno dei campi non valido: nome, tipo o lunghezza");
          LPC_GestioneErrore(LPC_BAD_FIELD, "CreateDatabaseFile", Err6);
          return LPC_BAD_FIELD;
	}
       h->campo[i].fieldtype=(uint16_t) htons(h->campo[i].fieldtype);
       h->campo[i].fieldtype=FieldData->FieldType;
       h->campo[i].fieldlen=(uint16_t) htons(h->campo[i].fieldlen);
       if((h->campo[i].fieldtype!=CHARACTER) || (h->campo[i].fieldtype!=NUMERIC) || (h->campo[i].fieldtype!=DATE) || (h->campo[i].fieldtype!=LOGICAL)){
          char Err7[256];
             (void) sprintf(Err7, "Valore di uno dei campi non valido: nome, tipo o lunghezza");
             LPC_GestioneErrore(LPC_BAD_FIELD, "CreateDatabaseFile", Err7);
             return LPC_BAD_FIELD;
       }
       if((h->campo[i].fieldtype==CHARACTER) && ((FieldData->FieldLen>=1) && (FieldData->FieldLen<=FIELD_CHAR_LEN)))
           h->campo[i].fieldlen=FieldData->FieldLen;
       if((h->campo[i].fieldtype==NUMERIC) && (FieldData->FieldLen<=FIELD_NUM_LEN)) 
           h->campo[i].fieldlen=FieldData->FieldLen;
       if((h->campo[i].fieldtype==DATE) && (FieldData->FieldLen<=FIELD_DATE_LEN))
           h->campo[i].fieldlen=FieldData->FieldLen;
       if((h->campo[i].fieldtype==LOGICAL) && (FieldData->FieldLen<=FIELD_LOGI_LEN))
           h->campo[i].fieldlen=FieldData->FieldLen;
     }
   int ret=fwrite(h,sizeof(h),(size_t) h->dimHeader,fp);
   if(ret!=h->dimHeader){
      char Err9[256];
             (void) sprintf(Err9, "Errore di scrittura su file");
             LPC_GestioneErrore(LPC_ERR_WRITE, "CreateDatabaseFile", Err9);
             return LPC_ERR_WRITE;
       }
   rename(Name,finale);
   fclose(fp);
   free(fp);
   free(FieldData);
   free(h);
   free(Name);
   return LPC_OK;
   putchar('\n');
}
Mi passa tutti i test tranne questo. Praticamente mi va in Segmentation Fault, ma non capisco cosa mi sono dimenticato di allocare.

Grazie.
Manugal è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy? Google Pixel 10 è compatto e ha uno zoom ...
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
Metroid Prime Beyond: arriva un trailer ...
Fujifilm GFX Eterna 55: una soluzione co...
Stardew Valley arriva su Switch 2: una c...
E-bike fat legale con "pulsante mag...
Nintendo Virtual Boy: l'accessorio per S...
Popucom si presenta come uno dei miglior...
Super Mario Galaxy il film: l'idraulico ...
Stellantis, contro risposta a BYD: "...
Microsoft evita una sanzione in Europa p...
TCL a IFA 2025: TV Mini LED, smartphone ...
Neanche la politica è salva: l'Al...
I nuovi Pixel 10 in mostra a Milano con ...
Perplexity di nuovo in tribunale: Merria...
AirPods 4 al minimo su Amazon: la versio...
Sam Altman sempre più convinto: l...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:19.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v