Napisałem program w MS Visual C++ 2005 Express Edition, ale nie uruchamia się on na komputerze, na którym nie ma zainstalowanych odpowiednich bibliotek. Jak skompilować program, żeby biblioteki były w pliku EXE i żeby ktoś, komu odostępnię program nie musiał już niczego instalować. Czytałem, że trzeba zrobić linkowanie statyczne, ale nie znalazłem, gdzie się to ustawia. Jeżeli ktoś wie, to proszę o pomoc.
hm…z tego co kojarze to moze pomoc zainstalowanie na tym drugim kompe microsoft .net framework - zobacz kombinuj - tez mialam ten problem
Mi chodzi jednak o to, żeby ktoś nie musiał nic instalować (z resztą potrzebne sa chyba jeszcze inne biblioteki).
no to w takiem razie nie wiem ale po googluj - pewnie cos znajdziesz - a tak btw - na http://www.eprog.pl napewno ci cos powiedza
Czy to jest program w kodzie zarządzanym, czy niezarządzanym? Wklej kilka pierwszych linijek kodu dowolnego pliku .cpp jeśli nie wiesz. Biblioteki to bardzo względne pojęcie: jeśli to kod niezarządzany, możliwe, że potrzebujesz bibliotek MFC. Jeśli zarządzany - potrzebujesz .NET framework (i tu już bez instalacji nie obejdzie się).
ryba022 byłaś już upominana za nieużywanie polskich znaków w pisowni, popraw to proszę…
AssemblyInfo.cpp
#include "stdafx.h"
using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::CompilerServices;
using namespace System::Runtime::InteropServices;
using namespace System::Security::Permissions;
W folderze są pliki z rozszerzeniem resx , opisane jako .NET Managed Resources File (.resx), więc wnioskuję, że instalacja MS .NET Framework będzie konieczna, ale czy coś jeszcze będzie potrzebne osobie, której udostępnię program?
Kod zarządzany. Potrzebujesz z aplikacją dostarczyć .NET Framework Redistributable.
Niestety zainstalowanie .NET Frameworka nie wystarczyło. Zastanawiam się, czy nie jest jeszcze konieczne Visual C++ 2005 Redistributable Package, ale czytałem, że można to jakoś zalinkować statycznie, tylko nie wiem (i nie znalazłem) jak.
A tak w ogóle, to czy w Visual C++ 2005 można tworzyć oprogramowanie w kodzie niezarządzanym
Można tworzyć w kodzie niezarządzanym, jeśli nie jest to VS Express. W przypadku Express trzeba doinstalować Platform SDK. .NET Framework powinien wystarczyć, pod warunkiem, że to odpowiednia wersja .NETa. Visual C++ 2005 Redistributable Package może być potrzebny ale wyłącznie przy problemach z kodem niezarządzanym.
Program nie działa ani po zainstalowaniu .NET Framework 2.0, ani po zainstalowaniu wersji 3.0. Czy może mieć znaczenie to, że instalowałem Service Packa na Vistę do Visual C++ Express i kompilowałem pod Vistą?
Przy próbie uruchomienia programu pojawia się jedynie taki komunikat:
U mnie na komputerze z zainstalowanym MS VC++ 2005 Express program działa.
To że skompilowałeś pod Vistą nie powinno mieć znaczenia.
Możesz spróbować dwóch rzeczy.
-
sprawdź aplikację na kilku komputerach - to może być problem tej maszyny.
-
spróbuj tak jak sugerowałeś z VC_redist. Jeśli to pomoże to będę zaskoczony i będę musiał poczytać gdzieś o tym pakiecie - z tego co wiem zawiera wyłącznie niezarządzane biblioteki. Jeśli zarządzany kod wymaga którejkolwiek z nich to jest to moim zdaniem bardzo przykra zależność.
W programie o którym pisałem powyżej był jakiś błąd, po zbudowaniu interfejsu od nowa (nie jest to duża aplikacja) i wklejeniu kodu wszystko zaczęło działać, trochę dziwne, ale trudno. W każdym razie .NET niestety niewystarcza, konieczne jest instalowanie VC_redist, ale czy jest jakaś możliwość ominięcia tego problemu przez linkowanie statyczne. Oczywiście rozmiar pliku exe powiększy się, ale to i tak chyba wygodniejsze niż dostarczanie tego pakietu, tak jak pisał Ryan , to bardzo przykra zależność.
Z góry dziękuję za odpowiedź.
Miałem podobny problem ale z MFC. Pomaga kompilacja jako Release. Przy kompilacji Debug plik exe odwołuje się do bibliotek, których zapewne nie będzie na komputerze na którym nie ma VS.
I tu się mylisz. Release(domyślnie) dolinkowywuje runtime’y VC++, trzeba to wyłączyć, albo zainstalować na komputerze docelowym pakiety redystrybucyjne.
Btw. po co odgrzebujesz ten wątek?
Co dolinkowuje? Statyczne biblioteki MFC? I niby dlaczego należałoby to wyłączać?
Odgrzebuję bo mówi o komunikacie, który występuje przy problemie z bibliotekami MFC.
Dolinkowuje runtime’y Visual C++. Napisałem przecież. Jak chcesz to MFC też sobie możesz dolinkować.
Występuje przy linkowaniu z bibliotekami Visuala, gdy się ich do projektu nie dołączy.
A w którym miejscu się je dołącza?
W ustawieniach linkera…