Ho letto argomenti su entrambi i lati sull'opportunità di collegare la libreria di runtime C in modo statico o dinamico nei progetti di Visual Studio e non sono ancora del tutto sicuro di cosa pensare.Dovrei collegarmi al runtime di Visual Studio C in modo statico o dinamico?
Il mio progetto carica alcune librerie di terze parti (Python, HDF5, Trilinos e Microsoft MPI), ognuna delle quali deve essere costruita con la stessa libreria di runtime del mio eseguibile finale (altrimenti non possono essere collegate insieme). Quando si collega staticamente, ciascuna di queste librerie conterrà una copia del runtime C. Ho letto che questo è suscettibile di causare problemi perché l'eseguibile finale conterrà più copie del runtime, nessuno dei quali può interagire tra loro. Ma il linker non si lamenterebbe se gli stessi simboli fossero stati definiti in modo multiplo?
Vorrei evitare "DLL Hell" ma sono preoccupato per errori insidiosi che potrebbero derivare dal collegamento statico in più copie del runtime. Sto leggendo le cose sbagliate?
Inoltre, sto utilizzando Visual Studio 2005 e ho letto che il runtime di Service Pack 1 non è compatibile con le versioni precedenti. Significa che un'app creata senza SP1 non verrà eseguita su un computer con le DLL SP1, anche se hanno lo stesso nome (ad esempio msvcr80.dll)?
Questa è la risposta che stavo cercando. Sembra che le assemblee private siano la soluzione più sicura per il mio problema. Alcuni mi ricordano i pacchetti Mac in quanto un'app è distribuita in una struttura di directory fissa. Grazie! – user76293
Ma gli assembly privati non verranno riparati da Windows Update, corretto? Quindi dovrai tenere aggiornata la tua copia della libreria di runtime per conto tuo. Vedi anche http://blogs.msdn.com/larryosterman/archive/2004/04/29/123090.aspx –
Non ho mai funzionato quegli assembly privati se la mia cartella 'application' (My App) contiene un mix di 32-bit e applicazioni a 64 bit. Non puoi semplicemente aggiungere qualcosa come x32 o x64 al nome della cartella assembly, il che significa che puoi utilizzare solo gli assembly privati se hai solo applicazioni a 32 bit o solo a 64 bit. – Patrick