Linkowanie - Visual C++

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 :wink:

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.

  1. sprawdź aplikację na kilku komputerach - to może być problem tej maszyny.

  2. 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ść.

http://www.microsoft.com/downloads/deta … laylang=en

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…