Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C++] Przenoszenie napisanego programu na inne komputery

Rafał Grycner 02 Maj 2012 17:09 4792 9
  • #1 02 Maj 2012 17:09
    Rafał Grycner
    Poziom 7  

    Witam,
    zaczynam programowanie w C++ i od pewnego czasu (mierzonego w ilości prób wyszukiwania na googlach) zmagam się z prozaicznym problemem:

    Przenoszenie napisanego programu na inne komputery.

    Jak dotąd udało mi się ustalić, że można przygotowywać pliki makefile, które sterują procesem kompilacji i linkowania i umożliwiają złożenie pliku exe ze wszystkimi wymaganymi bibliotekami itd.

    Problem leży jednak w tym, że nie mam zielonego pojęcia jak to technicznie się robi. Gdzie się ten plik makefile przygotowuje? Czy jest to część projektu? Skąd wiadomo jakie składniku muszą się znaleźć w finalnym .exe, żeby to działało na innych komputerach?

    Podejrzewam, że jest to dość elementarny problem. Używam Visual Studio 2010 Express, ostatnio też próbowałem Borland C++ Bulider 6. Pracuję na XP, a przenosiłbym chętnie na Win 7.

    Będę wdzięczny za pomoc.

    1 9
  • #2 02 Maj 2012 17:34
    michcior
    Poziom 30  

    Jakbyś przenosił z Windows na Linux, to by było coś. I trzeb by się nauczyć make, gcc i paru innych narzędzi. Ale tak, to kwestia kompatybilności bibliotek. Zwykle XP ->W7 działa exec bez żadnych ceregieli. Stare Borlandy miały problemy. Np Delphi 3 ale Delphi 7 już nie.

    1
  • #3 02 Maj 2012 18:19
    12nala34
    Poziom 14  

    Sprecyzuj: chcesz przenieść gotowy program (podejrzewam, że składający się z jednego pliku *.exe), czy przenieść cały projekt (żeby go edytować)?

    Jeżeli skompilowałeś swój program i otrzymałeś exe (w folderze debug lub release w VS) to wystarczy na każdym innym komputerze z MS Windows odpalić ten plik - powinno działać. Kompilujesz w VS za pomocą przycisku F7 (F5), ale to już chyba wiesz.

    Jeżeli chcesz przenieść cały projekt to po prostu skopiuj cały folder z projektem (wystarczy przenieść kod źródłowy, ale przecież pamięci są duże i możemy sobie na taką rozrzutność pozwolić ;) ). Uruchom na innym komputerze z VS. Ważne jest, żeby przebudować na nowo cały projekt, bo czasem wychodzą kwiatki.

    Swoją drogą jak zaczynasz możesz spróbować pisać w Code::Blocks. Bardzo fajne środowisko (obsługuje C i C++). Visual Studio to już kombajn.

    0
  • #4 02 Maj 2012 18:35
    Rafał Grycner
    Poziom 7  

    Precyzuję:
    Chcę przenieść gotowy program, prościutki "hello world". Bez problemu działa u mnie, gdzie został napisany. Zrobiłem Relase. Przenoszę .exe na innego kompa (Win 7) i uruchamiam i błąd: brak pliku MSCVP100.dll.

    W programiku odnoszę się jedynie do <iostream>, więc podejrzewam, że tego "źródła" mu brakuje na drugim kompie no i jak temu zaradzić?
    Chcę uniknąć instalowania VS na innych komputerach. :)

    Może ja w ogóle zaczynam źle/nie na tym poziomie merytorycznym?

    EDIT: Doczytałem w sieci, że można na innych komputerach instalować "Microsoft Visual C++ 2010 Redistributable Package (x86)", co jak podejrzewam załatwi problem funkcjonowania tego programu, ale ciągle mnie takie rozwiązanie nie satysfakcjonuje: bo program ma 9kB, a paczka 25MB. Jak można taki manewr ominąć? (nawet jeśli wymaga to więcej pracy z mojej strony)

    0
  • #6 02 Maj 2012 18:54
    Rafał Grycner
    Poziom 7  

    Wskazałem typ win32; console application; empty project. Tej opcji o której piszesz w VS nie zauważyłem (ale też nie szukałem głęboko).

    0
  • Pomocny post
    #7 02 Maj 2012 19:08
    winuser2
    Poziom 17  

    Kolega niech zainteresuje się tym wątkiem :

    http://stackoverflow.com/questions/2035287/st...ime-library-linking-for-visual-c-express-2008

    Cytat:
    Project Properties -> Configuration Properties -> C/C++ -> Code Generation -> Runtime Library. Dll and Dll Debug are for dynamic linking.


    Zawsze można sprawdzić tabelę importów po takim czymś, ja używam ExeScope (tylko dla 32 bitowych PE).

    -1
  • #8 02 Maj 2012 19:22
    Rafał Grycner
    Poziom 7  

    Kolega się zainteresował, przeczytał i przestawił opcję w runtime library na /MT. Pomogło - działa.

    Teraz będę musiał więcej o tym poczytać, bo opinie naukowców były podzielone w tym wątku o bibliotekach. Ten ExeScope sprawdza jakich konkretnych bibliotek używa program (żeby ew. optymalizować...), czy robi coś innego? Też się będę musiał dokładniej przyjrzeć.

    Dziękuję za pomoc.

    -1
  • #9 02 Maj 2012 20:32
    Dżyszla
    Poziom 42  

    Generalnie ExeScope (podobnie jak WinHacker lub ResHacker) to program głównie do podglądania i edycji zasobów plików wykonywalnych. A w zasobach jest wiele przydatnych opcji ;)

    Co do wymienionej przeze mnie - mówiłem o Borlandzie, a nie o VC++, choć jak kolega wskazał - także tam znajduje się analogiczna opcja.

    Sprawa używania jest raczej prosta - jeśli masz dużo EXE/DLL i zależy Ci na rozmiarze, bądź potrzebujesz informacji o klasach (RTT), to używasz tak, że łączysz (czyli jak miałeś wcześniej). W przeciwnych wypadkach - nie ma potrzeby - ułatwisz uzytkownikowi instalację. Choć warto nadmienić, że gro programów i tak wymaga zainstalowanego Redistributable Package.

    -1
  • Pomocny post
    #10 06 Maj 2012 04:18
    antekone
    Poziom 16  

    Czy program się uruchomi czy nie, to zależy od tego, czy docelowa wersja Windows posiada daną bibliotekę w swoim repozytorium wersji o nazwie "Side by Side" (katalog Windows\WinSxS). Wersje wymaganych bibliotek można często wyciągnąć z pliku exe przy pomocy resource editorów, których nazwy padły w postach powyżej, podglądając zasób o nazwie Manifest, lub programem Dependency Walker, który jest jakby zaprojektowany do takich poszukiwań. Najszybciej jest jednak zajrzeć do katalogu typu Program Files\Microsoft Visual Studio 8\VC\Redist (na maszynie, na której kompilowany jest program), gdzie powinny znajdować się poprawne biblioteki redistributable wymagane przez plik exe - zwykle to te pliki należy dołączyć do instalki lub archiwum ze swoim programem.

    -1