Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Al
Založen: 23. 10. 2007 Příspěvky: 196
|
Zaslal: 10. březen 2012, 23:01:34 Předmět: Visual Studio 2010 mě vytočilo |
|
|
Všimli jste si, že programy přeložené ve Visual C++ 2010 nejdou spustit na ničem starším než Windows XP SP2? Tím mě teda vytočili. Ne proto, že bych používal nějaká prehistorická Windows, ale když něco napíšu jakože jednoduše a nezávisle na nových rozšířeních API, uvedu do dokumentace, že to má fungovat i na starších Windows. Ale ono nefunguje. Po prohledání netu jsem zjistil, že to je prostě "by design" Microsoftí knihovny - na XP SP1, W2000 či starším systému se nespustí, i kdyby tam člověk měl jen prázdný main().
Já jsem přitom jenom chtěl vyzkoušet, jak se program chová, když ho spustím na počítači bez DirectX 9. Jenže jsem nedokázal sehnat Windows, kde by byl SP2, ale nebylo DX9. Situaci jsem nakonec vyřešil překompilováním programu ve VC++ 2008. Ale jsem rád, že ty programy neprodávám - on se vždycky nějaký zákazník najde, co má na počítači něco jinak a pak dodatečně zjisšťovat, že program kvůli libovůli Microsoftu na některých počítačích zbytečně nefunguje, to je teda "radost"... |
|
Návrat nahoru |
|
 |
Tringi

Založen: 28. 07. 2007 Příspěvky: 290
|
Zaslal: 10. březen 2012, 23:20:11 Předmět: |
|
|
By design? To se mi nezdá.
Céčkové EXE vážou na verzi Windows dvě věci. Po spuštění linkované funkce API a verze C či C++ runtime knihovny.
Sada standardních systémových hlavičkových souborů respektuje makro WINVER (a další) podle kterých se deklarují funkce API dostupné na daném systému a starších pro nalinkování po spuštění. Pro WinXP je to #define WINVER 0x0501, pro Win2k pak 0x0500, atp.
Příslušné C/C++ runtime jsou redistributovatelné balíčky, takže je na starší systém stačí nainstalovat, nebo nastavit kompilaci ve Visualu Studiu tak, aby cílilo a linkovalo vůči starší verzi, a nebo je linkovat staticky. To sice dost zvětší EXE ale tuhle vazbu na systém odstraní. _________________ WWW | GitHub | TW |
|
Návrat nahoru |
|
 |
Tringi

Založen: 28. 07. 2007 Příspěvky: 290
|
Zaslal: 10. březen 2012, 23:37:46 Předmět: |
|
|
Další věc, kterou EXE (PE) loader Windows ověřuje, jsou čísla minimální verze OS a subsystému (zde ekvivaletní) v hlavičce souboru. Dohledal bych si jakým parametrem linkeru se to nastavuje a poupravil podle potřeby.
Když nad tím ale dále uvažuju, vůbec nevylučuju že by MS zcela možnost cílit na starší verze runtime či OS odebral. Přece jen, když už tyhle verze standardně spotřebitelsky nepodporují, asi se nebudou obtěžovat ani s laděním výstupu nového kompilátoru.
Je podstatné se zamyslet, kam je daný kus software cílen, a zda je v daném segmentu více než zlomek uživatelů s dnes již nepodporovaným systémem, a jak moc velký problém to pro autora je. U vývoje her se určitě nemá smysl zaobírat staršími OS než plně aktualizované WinXP, i když právě zde málokterá hra využívá nějaké API (mimo DirectX), které by nebylo už na Win98.
Já takové štěstí nemám, já ty programy prodávám.
Ale i nejmodernější MinGW defaultně cílí na msvcrt.dll které je dostupné od Windows 95 OSR2, Cygwin má runtime celý svůj, a Digital Mars mi umí vyplivnout NE EXE pro Win 3, když jej potřebuju. _________________ WWW | GitHub | TW |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 10. březen 2012, 23:44:34 Předmět: |
|
|
Tringi napsal: |
U vývoje her se určitě nemá smysl zaobírat staršími OS než plně aktualizované WinXP |
Někteří výrobci her dělají pouze pro DX10, což znamená, že nejstarší podporovaný Windows je Vista. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
Al
Založen: 23. 10. 2007 Příspěvky: 196
|
Zaslal: 11. březen 2012, 00:04:00 Předmět: |
|
|
Tringi: Nezdát se ti to může, ale je to prostě tak. Promiň, ale je fakt zbytečné o tom teoretizovat, když už víme, jak je to doopravdy. Články k věci jsou na Googlu na dotaz "missing decodepointer". Hodně lidí se na to jen ptá, ale jsou tam i vysvětlení.
Ta věc se totiž projevuje tak, že ty programy při startu vyhodí jen tuhle hlášku:
Jde o to, že CRT knihovna VC2010 se odkazuje na nějaké věci z kernelu Windows, které před XP SP2 nejsou. Proto program nejde vůbec spustit.
(Tím chci říct, že co zde napsal Tringi, je matoucí, protože to dává pocit, že věci jsou jinak. Ale pravdou je to, co píšu já. Program se prostě nespustí bez ohledu na nastavení maker WINVER apod. A proto mě to vytočilo a proto jsem založil tohle vlákno.) |
|
Návrat nahoru |
|
 |
Al
Založen: 23. 10. 2007 Příspěvky: 196
|
Zaslal: 11. březen 2012, 00:09:27 Předmět: |
|
|
Ještě jsem našel v MSDN stránku o WINVER, kde Microsoft uvádí, že VC2008 i VC2010 nepodporují Windows 9x a NT. Čili opět "zapomněli" napsat, že ve skutečnosti nepodporují ani W2000 a XP před SP2 a W2003 před SP1. |
|
Návrat nahoru |
|
 |
Ladis

Založen: 18. 09. 2007 Příspěvky: 1537 Bydliště: u Prahy
|
Zaslal: 11. březen 2012, 00:09:47 Předmět: |
|
|
Nevím, co řešíte. Na ostatních OS taky binárka z nových dev tools nejede v moc starých verzích OS. Microsoft jen donedávna "trhal" partu . _________________ Award-winning game developer |
|
Návrat nahoru |
|
 |
Crypton

Založen: 14. 05. 2009 Příspěvky: 306 Bydliště: The Void
|
Zaslal: 11. březen 2012, 00:39:35 Předmět: |
|
|
Něco o tom jsem našel zde: http://qualapps.blogspot.com/2010/04/visual-c-2010-apps-dont-support-windows.html
Takže něco pravdy na tom bude. Jinak, potřebuješ nutně ty runtime knihovny z VS2010? Nestačily by ti třeba ty z verze 2008?
Ono se to totiž dá ve VS2010 nastavit:
citace: |
To change the project toolset
-In Visual Studio, open the Property Pages for your project. In the left pane, expand Configuration Properties and then select General.
-In the right pane, select Platform Toolset and then select the toolset you want. For example, if you want to compile against the Visual Studio 2008 libraries, select v90.
-Click OK. |
 _________________
 |
|
Návrat nahoru |
|
 |
Tringi

Založen: 28. 07. 2007 Příspěvky: 290
|
Zaslal: 11. březen 2012, 02:23:28 Předmět: Re: Visual Studio 2010 mě vytočilo |
|
|
Al napsal: |
Tringi: Nezdát se ti to může, ale je to prostě tak. Promiň, ale je fakt zbytečné o tom teoretizovat, když už víme, jak je to doopravdy. |
No lol, co je tohle za reakci?
Máš z nějakého důvodu potřebu nechápat co jsem měl na mysli? Pokud ano pak kontruji tím, že tvůj výrok zde:
Al napsal: |
Všimli jste si, že programy přeložené ve Visual C++ 2010 nejdou spustit na ničem starším než Windows XP SP2? |
...je zjevně nesprávný, protože je to jen otázka verze runtime který použiješ. Jak o příspěvek výše upřesnil Crypton, i z Visual C++ 2010 lze linkovat vůči v9.0 (Visual Studio 2008) knihovnám, které omezení na XP SP2 nemají. To je to, o čem jsem teoretizoval v posledních dvou větách mého prvního příspěvku, protože Visual Studio nepoužívám, a dané problematické chování může být způsobeno lecčím.
Al napsal: |
Tím chci říct, že co zde napsal Tringi, je matoucí, protože to dává pocit, že věci jsou jinak. Ale pravdou je to, co píšu já. Program se prostě nespustí bez ohledu na nastavení maker WINVER apod. |
Proč mám pocit, že se se mnou snažíš být za každou cenu v neexistujícím konfliktu?  _________________ WWW | GitHub | TW |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 11. březen 2012, 03:31:36 Předmět: |
|
|
Souhlas s Ladisem. Zpětná kompatibilita je dost velký luxus a XP SP2 vyšel před cca 6 lety. Kdo by chtěl podporovat dinosauří systémy staré víc jak 6 let? Microsoft by mohl inovovat rychleji, kdyby tu dobu zkrátil ještě víc.
A na závěr dodatek ve stylu Ala: Pravdou je to, co píšu já.  _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
Al
Založen: 23. 10. 2007 Příspěvky: 196
|
Zaslal: 12. březen 2012, 00:24:27 Předmět: |
|
|
Crypton napsal: |
citace: |
To change the project toolset
-In Visual Studio, open the Property Pages for your project. In the left pane, expand Configuration Properties and then select General.
-In the right pane, select Platform Toolset and then select the toolset you want. For example, if you want to compile against the Visual Studio 2008 libraries, select v90.
-Click OK. |
|
Díky, tohle je výborná věc.
Tringiho musím upozornit, že to bohužel pořád nechápe. Tím nastavením, co uvedl Crypton, se změní projekt tak, aby se překládal pomocí překladače VC++2008. Čili už se nepřekládá pomocí VC++2010 - z něj se používá jen to vývojové prostředí. Prostě platí: PROGRAMY PŘELOŽENÉ VE VC++2010 NEJDOU SPUSTIT NA NIČEM STARŠÍM NEŽ XP SP2 ČI 2003 SP1.
Jinak souhlas s Ladisem.  |
|
Návrat nahoru |
|
 |
Tringi

Založen: 28. 07. 2007 Příspěvky: 290
|
Zaslal: 12. březen 2012, 08:06:32 Předmět: |
|
|
Nemám možnost si ověřit ale je-li to tak, tak to je VC++ pěkně naho*no (pro mnoho různých použití) kompilér.
Mému MinGW nedělá problém cílit libovolné verze MS C runtime knihovny a stále mám možnost využívat všechny nejnovější fičury C++. _________________ WWW | GitHub | TW |
|
Návrat nahoru |
|
 |
satik
Založen: 06. 05. 2010 Příspěvky: 161 Bydliště: Krkonose
|
Zaslal: 12. březen 2012, 09:41:44 Předmět: |
|
|
Al napsal: |
PROGRAMY PŘELOŽENÉ VE VC++2010 NEJDOU SPUSTIT NA NIČEM STARŠÍM NEŽ XP SP2 ČI 2003 SP1. |
Kdyz uz tu tak slovickaris, tak to aspon napis dobre  |
|
Návrat nahoru |
|
 |
Al
Založen: 23. 10. 2007 Příspěvky: 196
|
Zaslal: 12. březen 2012, 23:28:48 Předmět: |
|
|
Dnes jsem ještě nahodil do virtuálu W98 a tam nejdou spustit ani progrmay přeložené ve VC++2008. Na druhou stranu to jedno demo, co jsem v něm kdysi přeložil a releasnul, si asi nikdo vůbec nestáhl a nespouštěl , protože si na nefunkčnost na W98 nikdo nestěžoval.
MinGW asi bude víc kompatibilní, to věřím, ale jsem už zvyklej na VC++. Asi spíš půjdu Crypton-way. 
Naposledy upravil Al dne 13. březen 2012, 00:46:25, celkově upraveno 1 krát |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 13. březen 2012, 00:02:56 Předmět: |
|
|
Al napsal: |
Dnes jsem ještě nahodil do virtuálu W98 a tam nejdou spustit ani progrmay přeložené ve VC++2008. Na druhou stranu to jedno demo, co jsem v něm kdysi přeložil a releasnul, si asi nikdo vůbec nestáhl a nespouštěl , protože si na nefunkčnost na Wíá nikdo nestěžoval.
MinGW asi bude víc kompatibilní, to věřím, ale jsem už zvyklej na VC++. Asi spíš půjdu Crypton-way.  |
to jsou nejake specialni Windows Donkey Edition?  |
|
Návrat nahoru |
|
 |
|