PDA

Visualizza la versione completa : [C++] impossibile copiare libstdc++-6.dll


Multivelox
22-02-2013, 20:30
Sto facendo un programma in c++,il programma č dentro uno zip con le 2 librerie (libgcc_s_dw2-1.dll e libstdc++-6.dll), e quindi salvo il programma sul desktop insieme alle 2 librerie per avviare il programma in c una prossima volta senza riandare nello zip.
Per la prima non ci sono problemi a copiarla con la system.. "copy libgcc_s_dw2-1.dll C://percorso/desktop.." , mentre facendo gli stessi passi con la seconda libreria mi dice che non esiste, ho provato anche a farlo dal cmd di windows senza usare il mio programma ed effettivamente non mi riesce a copiare libstdc++-6.dll nonostante compaia nell'elenco con la "dir". Ho provato anche a rinominarla con un nome tipo "esempio.dll" e cosė riuscivo a copiarla, ma č un problema poi a rinominarla di nuovo in libstdc++-6.dll. Quindi credo che il problema sia la stringa libstdc++-6.dll...
Non so come diavolo copiare quella maledetta libreria insieme all'eseguibile e all'altra libreria che per fortuna funziona.
(ho controllato anche gli attributi di scrittura..ma niente. libstdc++-6.dll non vuole saperne di essere copiata )
Consigli?
Grazie in anticipo! :D

un piccolo esempio http://s8.postimage.org/ygok2wmk5/masac.jpg
Nonostante ci sia libstdc++-6.dll risulta inesistente, al contrario di libgcc_s_dw2-1.dll
(ho messo il comando copy a caso, solamente per far vedere l'esempio ;) )

MItaly
22-02-2013, 23:26
Il comando copy supporta una sintassi speciale per unire pių file, sintassi che appunto impiega il +; per questo motivo, se copi file che hanno un + nel nome in quella maniera si "confonde". Come soluzione, racchiudi il nome del file da copiare tra virgolette.

Per inciso, per copiare un file sarebbe meglio usare l'apposita API CopyFile (http://msdn.microsoft.com/en-us/library/windows/desktop/aa363851%28v=vs.85%29.aspx) oppure scrivere una semplice routine di copia con le normali funzioni di IO del C++.


void copyfile(const char * source, const char * destination)
{
std::ifstream f1(source, std::fstream::binary);
std::ofstream f2(destination, std::fstream::trunc|std::fstream::binary);
if(!f1)
throw std::runtime_error("Impossibile aprire il file di origine.");
if(!f2)
throw std::runtime_error("Impossibile aprire il file di destinazione.");
f1 << f2.rdbuf();
if(!f1 || !f2)
throw std::runtime_error("Errore di copia.");
}

Multivelox
23-02-2013, 02:48
Originariamente inviato da MItaly
Il comando copy supporta una sintassi speciale per unire pių file, sintassi che appunto impiega il +; per questo motivo, se copi file che hanno un + nel nome in quella maniera si "confonde". Come soluzione, racchiudi il nome del file da copiare tra virgolette.

Per inciso, per copiare un file sarebbe meglio usare l'apposita API CopyFile (http://msdn.microsoft.com/en-us/library/windows/desktop/aa363851%28v=vs.85%29.aspx) oppure scrivere una semplice routine di copia con le normali funzioni di IO del C++.


void copyfile(const char * source, const char * destination)
{
std::ifstream f1(source, std::fstream::binary);
std::ofstream f2(destination, std::fstream::trunc|std::fstream::binary);
if(!f1)
throw std::runtime_error("Impossibile aprire il file di origine.");
if(!f2)
throw std::runtime_error("Impossibile aprire il file di destinazione.");
f1 << f2.rdbuf();
if(!f1 || !f2)
throw std::runtime_error("Errore di copia.");
}



Grazie a te ho risolto!! ;)
Alla prossima!

Loading