Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: [delphi] compilazione

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    43

    [delphi] compilazione

    ho fatto un piccolo programma con delphi 7 su winXP. Per assicurarmi che funzioni a dovere anche su altri sistemi l'ho provato con win98 e mi dà questo errore:

    File Dll rtl70.bpl non trovato.

    Premesso che l'eseguibile in effetti è veramente piccolo (12kb), da Project-Options-Packages ho attivato "Build with runtime packages" e nella casella di testo ho scritto "IcsDel70;rtl" che sono gli unici pacchetti che mi servono. Ora... perché non li trova? Non dovrebbero essere compresi nell'eseguibile che viene generato?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Quando compili il programma con l'opzione Build with runtime packages, l'eseguibile viene generato in modo da linkarsi dinamicamente ai package (BPL) e il loro codice non viene incluso (inglobato) nel file eseguibile finale.

    Il file risulta molto piccolo, ma richiede che venga accompagnato dai package quando viene trasportato su una macchina in cui non è stato installato Delphi.

    Il vero problema qual è: sebbene si compili il programma in modo che si "linki" ad un solo package, non vengono inclusi nell'eseguibile nemmeno i package da dipende quello escluso.

    Pertanto, se hai compilato il tuo programma escludendo il package IcsDel70, dovrai fornire all'eseguibile tutti i package dai quali dipende quest'ultimo.

    Il mio suggerimento è quello di copiare di volta in volta i package fondamentali fino a quando l'errore non scompare, a meno che tu non abbia i file sorgenti del package utilizzato e quindi ti basterebbe solamente guardare quelli inclusi nella clausola "requires".

    Spero di aver azzeccato il tuo problema...

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    43
    chiarissimo, grazie :sexpulp:

    però per me è importante avere un file .exe "singolo" da poter distribuire senza problemi
    se disabilito l'opzione "Build with..." l'exe viene di 400k :adhone: che mi pare un po' troppo per un programma di prova che non fa quasi nulla
    quindi.. è possibile "unire" solo le dll necessarie all'exe in modo che non richieda nessuna dipendenza esterna?

    ciao

  4. #4
    come accennava alka prova a eliminare tutti i package che non usi e lasciare solo quelli che usi eventualmente compilati all'interno.

    Per quanto ne so delphi è un buon ottimizzatore e in particolare con le ultime versione riesce a includere solo quello di cui ha bisogno, però 400Kb potrebbero essere troppi se l'applicazione è piccola.

    Fai qualche prova a disattivare qualche package e facci sapere.

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Originariamente inviato da pa0l0
    chiarissimo, grazie :sexpulp:

    però per me è importante avere un file .exe "singolo" da poter distribuire senza problemi
    se disabilito l'opzione "Build with..." l'exe viene di 400k :adhone: che mi pare un po' troppo per un programma di prova che non fa quasi nulla
    quindi.. è possibile "unire" solo le dll necessarie all'exe in modo che non richieda nessuna dipendenza esterna?

    ciao
    Non capisco il problema.

    Delphi fornisce il codice sorgente di tutta la VCL, che non è altro che la strutturazione in classi che incapsulano elementi, funzionalità e controlli di Windows chiamando le relative funzioni API.

    Ora, a questo punto, Delphi mette a disposizione due alternative: compilare tutto il codice sorgente all'interno dell'eseguibile generato, oppure effettuare una compilazione usando i runtime package.

    La prima alternativa consente di ottenere un file eseguibile stand-alone, anche se il codice relativo ai controlli visuali utilizzati ovviamente aumenta le dimensioni del file.

    La seconda alternativa consente invece di ottenere un file eseguibile di dimensioni ridotte, più leggero, poichè il codice VCL non viene incluso nell'eseguibile ma viene lasciato nei package originali a cui il file eseguibile si "linka" all'avvio.

    I package sono sempre compilati automaticamente utilizzando questa seconda alternativa, poichè altrimenti si terrebbero delle duplicazioni del medesimo codice compilato, conflitti nei nomi delle classi in fase di installazione del package in Delphi, ecc.

    Pertanto, se i package utilizzati e linkati dinamicamente contengono classi che si basano su altre classi contenute in altri package, anche in questo caso deve avvenire un link dinamico tra i package in gioco.

    Quindi, in conclusione, se compilo un'applicazione in modo che venga linkata dinamicamente ad un determinato package X, che a sua volta si appoggia ad un secondo package Y, nella macchina del cliente dovrò installare entrambi i package.

    Non è possibile fare in modo che un package esterno si appoggi al codice binario contenuto nell'eseguibile...al massimo avviene solo l'inverso; inoltre, potrebbero esserci più file compilati che si linkano dinamicamente ai package, pertanto le forme binarie di tali package devono essere esterne e identiche se si vuole ottenere il medesimo impatto su tutti i programmi aggiornando ad esempio uno dei package.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Anch'io ho un problema molto simile al tuo. Ho incluso nel mio delphi delle librerie esterne per utilizzare un database mysql, e in fase di build le dll a cui esse si riferiscono non sono incluse, generando errori su pc dove non sono installate. Per ovviare a tutto questo (seguendo le indicazioni che mi sono state date nel forum) ho deciso di utilizzare l'installshield compreso nel pacchetto delphi, che mi permette di specificare tutte le librerie che mi servono. Spero che funzioni.

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    La questione in effetti è molto semplice: compilare con i runtime package, che a volte si presenta come l'unica soluzione possibile, specialmente se si usano componenti commerciali senza sorgente ma solo in forma di BPL, è come effettuare un link dinamico ad una DLL.

    Detto questo, va da sè che, seguendo questo approccio, occorre distribuire l'eseguibile unitamente alle librerie.

    Nel caso di Delphi, non ci sono nemmeno OCX da registrare, come avviene per VB: basta solamente che i file BPL corrispondenti ai package vengano copiati nella cartella di sistema del PC utente.

    Che queste librerie vengano copiate con un file BAT o usando InstallShield, il risultato è identico, ma è comunque un'operazione da fare.

    La comodità di InstallShield Borland Limited Edition è che i package inclusi comunemente in Delphi vengono elencati per nome: basta porre un segno di spunta a fianco del package e questo viene installato assieme a tutti i file relativi.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Il problema è che nel mio caso il package che uso per la connessione a mysql non è compreso nei driver ODBC, nè so come fare per comprenderlo in essi. Quindi non appare nella schermata di ODBC resources dell'installshield. Per ora ho provato solo a includere quelle librerie che windows dice di non trovare, ma non so se sia sufficiente. Da quanto hai detto sopra potrebbe non essere così. Devo ancora provare.

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,288
    Un package Borland è un package...un driver ODBC è un driver ODBC.

    Non hanno nulla in comune tra di loro.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    scusami ma NON ci siamo capiti. Volevo dire che il componente che uso non appare nè tra gli odbc nè tra object/merge modules dell'installshield. Oppure ha assunto un nome molto diverso...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.