Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157

    [c] dubbio su linking

    Salve a tutti.
    In questo caldo lunedì di agosto ho una domanda da "pignola" riguardante un esperimento che ho fatto su windows 7 con visual c++ (compilando come codice C).
    supponiamo che io abbia la libreria PIPPO che compilo in C ottenenendo come output pippo.lib (libreria statica a 32 bit).

    Prendo questa libreria e la includo staticamente nella libreria PLUTO, questa compilata invece a 64 bit.
    Il mio programma PAPERINO.exe (64 bit) fa un link statico a PLUTO.lib.
    quando paperino richiama una funzionalità di pippo, lavora a 32 o 64 bit?

    Le operazioni di build e di linking vanno a buon fine, riesco ad usare paperino.
    Ora non mi riempite di insulti, mi piace mettermi in situazioni limite (a volte provo a pensare da utonta).

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Così a naso: 32 bit. La libreria pippo è compilata a 32 bit quindi il codice che esegue è 32 bit.
    Se Paperino passa o richiede parametri a pippo, al limite il compilatore effettua un up/down casting per il parametro in questione. Un long 64bit lo trasforma in 32bit (usando i 4 byte meno significativi probabilmente), un pointer idem, etc.
    Comunque puoi sincerartene facendo un sizeof di un pointer che passi da Paperino a pippo, prima e dopo il passaggio. Prima è 64 bit, dopo dovrebbe essere a 32bit.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    sisi pensavo di fare una roba del genere, a naso pensavo pure io la stessa cosa. Ma fare quella semplice operazione è un po' lunga (in dettaglio perdo un bel po' di tempo a compilare pippo), è un lavoro che faccio a dimostrazione della mia teoria, ma come dire, se il gioco vale la candela, ben venga.
    Un'altra idea (che mi è venuta adesso) era utilizzare un long a 64 bit in modo da valorizzare i bit meno significativi (quindi perdita di dati con un'eventuale downcasting): visto che posso chiamare 2 funzioni che fanno 2 trasformazioni una l'opposta dell'altra, teoricamente se vado da A a B e viceversa dovrei avere che ho lo stesso valore.
    A naso penso di perdere dati.
    Dici che questa prova rapida vale la pena di essere fatta?

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da valia
    perdo un bel po' di tempo a compilare pippo
    Puoi sempre fare una piccola lib con una funzione, giusto per fare esperimenti. Almeno ti togli lo sfizio di vedere che succede davvero.

    Dici che questa prova rapida vale la pena di essere fatta?
    Direi di si. In fondo la situazione non è molto diversa dal passaggio da 16bit a 32bit di qualche era informatica fa.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    la cosa strana (non so fino a che punto però) è che compilando la lib dependency walker (ma anche il comando file) mi dice che è a 64 bit (anche se in effetti la versione di quella lib che io ho non supporta la lib a 64 ) e questo secondo me succede perché io compilo a riga di comando usando visual studio ma a riga di comando
    codice:
    Setting environment for using Microsoft Visual Studio 2008 Beta2 x64 tools.
    prima di lanciare il configure di pippo, poi lancio il configure (usa cygwin) e alla fine compilo (make che chiama il compilatore visual c++).
    Non vorrei che quel setting dell'environment fosse fuorviante, lib a 32 bit wrappata in una a 64 bit senza che me ne renda conto, di fatto impostando i vari flag usati da depends.

    Non mi so dare altre spiegazioni

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 © 2025 vBulletin Solutions, Inc. All rights reserved.