Plik wykonywalny exe - c++ visual studio 2010 express

0

Witam!
Mam problem bo zrobiłem program w konsoli - wszystko ładnie działa ale będę musiał go zaprezentować w szkole więc postanowiłem go wypróbować na innym komputerze - dałem F7 ( build solution ) i wziąłem ten plik .exe. Ale jak się można było spodziewać program nie dołączył bibliotek więc na innym komputerze nie działa. Jak zrobić aby je dołączył?
Bo ja wchodzę w opcje projektu - configuration proporties - c/c++ - code generation - i runtime library ustawiam z multi-threaded Debug DLL (/MDd) na Multi-threaded (/MT) jak gdzieś pisali ale wtedy przy kompilacji wywala mi masę błędów - co zrobic ?

0

Lepiej będzie jak ściągniesz i zabierzesz ze sobą: http://www.microsoft.com/download/en/details.aspx?id=5555
Jeżeli wiesz, że na pewno nie będzie można zainstalować tej paczki to dopiero zastanów się nad statycznym linkowaniem runtime.

0

Zależy z jakiej wersji visuala korzystasz. Jeżeli to 2010 można ominąć instalacje tego co podał Rev i w folderze z aplikacją dodajemy 3 pliki: msvcr100.dll, msvcp100.dll oraz Microsoft.VC100.CRT.manifest.
Zawartość pliku manifest:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
 <file name="msvcr100.dll"/>
<file name="msvcp100.dll"/>
</assembly>

Oczywiście na komputerze musi być zainstalowany net framework 4.0

0

Niestety nie działa :(
Jak zrobić żeby do programu były dołączone wszystkie potrzebne biblioteki ?
Wiem, że kiedyś mi się to udało tylko coś w ustawieniach w VS trzeba było zrobić

0

nie działa bo kompilowales pod wersję debug a nie release.
Build > Build configuration (chyba, wiem że na końcu menu) > tam zaznacz release i build. Teraz wszystko powinno działać

0

Mam ten sam problem. Niestety rozwiązanie z podanego linku nie działa. Zaznaczam, że ustawienia Debug czy Release nic nie zmieniają.

0

A może trzeba zmienić w Configuration manager... solution'a, nie wiem jak jest w VC++, ale w VC# trzeba zmienić właśnie tam na Release żeby działało.

0
xeo545x39 napisał(a)

A może trzeba zmienić w Configuration manager... solution'a, nie wiem jak jest w VC++, ale w VC# trzeba zmienić właśnie tam na Release żeby działało.

O tym mówiłem :) Gdy ustawię wszystko tak jak opisane, dostaję błąd:
Command line error D8016: '/clr' and '/MT' command-line options are incompatible

Gdy wyłączę CLR:
LIBCMT.lib(wwincrt0.obj) : error LNK2019: unresolved external symbol _wWinMain@16 referenced in function ___tmainCRTStartup

Byłbym bardzo wdzięczny za pomoc. Niestety przeszukiwanie googla nic nie dało.

0

Wiesz ja kiedyś tez chciałem wrzucać wszystko do exe ale w końcu zrezygnowałem. Jeżeli użyłeś coś .net to będzie żądał clr. Każdy kto tu pisze o problemie nie podaje jednej ważnej rzeczy: jaka wersja visuala? A wbrew pozorom jest to ważne. Wiec powiem co wiem. Jeżeli używasz visual 2008 to najlepiej zmienić net na wersje 2.0 (wątpię, że w drobnym programie używasz funkcji z wyższej wersji) Project-> <nazwa> Properties -> framework and references i masz po lewej combobxa z możliwością zmiany. Na komputerze gdzie ma zostać uruchomiany program instalujesz http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=29 (jeżeli windows ma wł aktualizacje to nie powinno być problemu bo powinno już być dawno zainstalowane). w przypadku 2010 w wersji EE nie ma możliwości zmiany net frameworka, przymusowo jest wersja 4 wiec program będzie mógł być uruchomiony na wind xp sp3/vista sp1/7 oczywiście z zainstalowanym net framework 4 (który jednak jeszcze dość rzadko ludzie instalują) no i oczywiście (dla programow zrobionych na visualu bez sp1) http://www.microsoft.com/download/en/details.aspx?id=5555 lub http://www.microsoft.com/download/en/details.aspx?id=8328 (visual z sp1).

0
mr_jaro napisał(a)

Każdy kto tu pisze o problemie nie podaje jednej ważnej rzeczy: jaka wersja visuala?

Używam Visual C++ 2010 Express. Wydaje mi się, że nie używam żadnych dodatkowych funkcjonalności .NET. Ba, nawet jestem pewien ;)
Piszę jedynie proste programiki w czystym C++ . Jeśli nie ma możliwości statycznego linkowania to chyba zmieniam kompilator.

0

Po pierwsze primo, musisz się zdecydować, czy aplikacja ma być konsolowa czy nie, i czy ma korzystać z .Net czy nie.

Dla normalnej aplikacji konsolowej przy tworzeniu projektu należy wybrać Win32 Console Application.
Wtedy program nie będzie korzystać z Frameworka oraz nie będzie problemu z funkcją main().

Później w opcjach projektu możesz wybrać, czy runtime ma być linkowane statycznie do exe czy być w osobnej DLL-ce. Jeśli runtime jest w DLL to wtedy program wymaga zainstalowania pakietu „Redistributable”, albo ręcznego skopiowania używanych dll-ek.

Rozwiązanie z Redistributable ma taką zaletę, że te biblioteki podlegają aktualizacji przez Windows Update, co ma się rozumieć nie będzie miało miejsca przy linkowaniu statycznym ani ręcznym dorzuceniu dll-ki.

0

ręcznym dorzuceniu dll-ki.

W linkowaniu statycznym faktycznie, ale w przypadku ręcznie dołączonych bibliotek, WinSxS przekieruje te biblioteki na te ewentualnie zaktualizowane.

0

Podsumowując, aby skompilować program do uruchamiania w systemie bez frameworka należy:

  • typ projektu WIN32 Console Application

  • ustawić konfigurację na Release

  • w zakładce 'General' przy opcji 'Use of MFC' ustawić 'Use MFC in a Static Library'

  • w zakładce 'Code generation' przy opcji 'Runtime Library' ustawić na MT

Mi nie chciało kompilować, z powodu źle wybranego typu projektu (dawałem CLR Console).

0

jeśli nie używasz MFC (a jak nie wiesz to nie używasz) to ustawienie MFC nie ma znaczenia - a może nawet zaszkodzić, bo jak linker dowali ci całe MFC statycznie to ci się zrobi exek na kilka mega.

1 użytkowników online, w tym zalogowanych: 0, gości: 1