Visual Studio 2008 na Win7 nekompiluje

Jeded Vojka

Visual Studio 2008 na Win7 nekompiluje
« kdy: 22. 06. 2018, 11:24:14 »
Občas si něco střihnu ve VS2008 na W7 32 bit (no problem) a teď jsem toto prostředí nainstaloval na W10 64 bit. A tam  pořád mi to při kompilaci píše: LNK2001"unresolved external symbol ... něco blabla imp ... mraky impů"
Ten samej projekt je úplně v pohodě na těch sedmičkách, a dokonce to samý na těch desítkách mi v klidu sestaví VS 2005.

Takže si myslím, že to bude spíš problém toho prostředí, než chyba někde v kódu.
Shell32.lib do additional dependencies jsem zkoušel doplnit, vypnout nějaký to 64bit testování taky, parametr linkeru Zi, Zl, jsem taky zkoušel - všechno bez úspěchu. Pořád LNK2001. Do adresářů "include" a "lib" jsem doplnil všechny možné knihovny a "h" soubory, stdio.h, stdlib.h tam mám - prostě tam je všechno   :o. "Directories" mám nastavený. Už fakt nwm, co s tím.

« Poslední změna: 22. 06. 2018, 12:34:04 od Petr Krčmář »


Honza

Re:Visual Studio 2008
« Odpověď #1 kdy: 22. 06. 2018, 11:49:54 »
Podle mě, ti chybí v systému knihovny, konkrétně jejich správné verze.
Hledej něco takového:
Microsoft Visual C++ 2005 Redistributable Package
Microsoft Visual C++ 2008 Redistributable Package
a pod.

ehmmm

Re:Visual Studio 2008
« Odpověď #2 kdy: 22. 06. 2018, 12:11:20 »
Neco podobneho jsem resil na 64bitovych Win7 a skoncil jsem tak, ze jsem nainstaloval WinXP Mode (proste tu jejich 32bitovou virtualku WinXP) a delal to v tom. Je to zbabele reseni, ale me to pro danou zakazku stacilo.

borekz

  • ****
  • 493
    • Zobrazit profil
    • E-mail
Re:Visual Studio 2008 na Win7 nekompiluje
« Odpověď #3 kdy: 22. 06. 2018, 12:36:57 »
Já myslím, že Redistributable Package je potřebný pro spuštění už sestavené aplikace na systému, kde není stejné Visual Studio. Ne k samotnému sestavení aplikace.

Jeded Vojka

Re:Visual Studio 2008
« Odpověď #4 kdy: 22. 06. 2018, 13:16:17 »
Podle mě, ti chybí v systému knihovny, konkrétně jejich správné verze.
Hledej něco takového:
Microsoft Visual C++ 2005 Redistributable Package
Microsoft Visual C++ 2008 Redistributable Package
a pod.
R. Package jsem taky zkoušel, nainstaloval, restartoval, spustil, nic.


x14

  • ***
  • 182
    • Zobrazit profil
    • E-mail
Re:Visual Studio 2008 na Win7 nekompiluje
« Odpověď #5 kdy: 22. 06. 2018, 13:55:38 »
Takže - nejde o problém s kompilací, ale s linkováním. Použití metody pokus/omyl při hlášce linkeru "unresolved external symbol" není vůbec dobrý nápad. Náhodné matlání s Shell32.lib je čistá ztráta času.
Kousek za touto hláškou je napsáno přesně, co ten linker nemůže najít - nejspíš to bude funkce (a za ní bude jméno funkce odkud tu chybějící voláš).
Bohužel tuto klíčovou informaci jsi z chybové hlášky odmazal :(

Re:Visual Studio 2008 na Win7 nekompiluje
« Odpověď #6 kdy: 22. 06. 2018, 13:56:36 »
Pokud nenapíšete alespoň příklady funkcí, které linker nenajde (unresolved externals), asi se nedopátráme toho, které knihovny vám chybí (či kterých máte špatné verze).

Pokud by se jednalo o běhovou knihovnu, můžete ji linkovat staticky. V souladu s MS licencí to myslím není, ale pokud se jedná o nástroj čistě pro vaši potřebu, neřešil bych to.

Pak je tu samozřejmě ještě otázka, zda-li máte důvod používat takto staré verze Visual Studia. Nestálo by za to projekt převést do verze 2017?

Jeded Vojka

Re:Visual Studio 2008 na Win7 nekompiluje
« Odpověď #7 kdy: 22. 06. 2018, 14:42:15 »
X14, Martin Dráb:
Týkalo se to standardních win API funkcí -
CreatePen
DeleteObject
BeginPaint
EndPaint
srand (GetTickCount())
SetTimer
takovýhle věci to dalo do těch "impů" a neudělá mi to spustitelný .exe soubor.

xxxxx

Re:Visual Studio 2008 na Win7 nekompiluje
« Odpověď #8 kdy: 22. 06. 2018, 16:10:47 »
Špatná napevno zadaná plná cesta ke knihovnám (v rámci nastavení solution ve VS)?

Například "C:\Program Files\Microsoft Visual Studio...", namísto "Program Files (x86)" pro 32bitovou verzi a podobně.

x14

  • ***
  • 182
    • Zobrazit profil
    • E-mail
Re:Visual Studio 2008 na Win7 nekompiluje
« Odpověď #9 kdy: 22. 06. 2018, 16:38:47 »
Hned bych zkontroloval, zda není náhodou zapnuté Ignore All Default Libraries (/NODEFAULTLIB).
I s tím se to dá provozovat, ale pak je zapotřebí ručně nařídit import i takové "samozřejmosti" jako Kernel32.lib.
BTW Není potřeba to dopisovat do nastavení projektu, stačí do nějakého .cpp někam přidat následující zaklínadla. Někdy to má své výhody.
Kód: [Vybrat]
#pragma comment(lib,"Kernel32.lib")
#pragma comment(lib,"Gdi32.lib")

Jeded Vojka

Re:Visual Studio 2008 na Win7 nekompiluje
« Odpověď #10 kdy: 22. 06. 2018, 16:49:26 »
Hned bych zkontroloval, zda není náhodou zapnuté Ignore All Default Libraries (/NODEFAULTLIB).
I s tím se to dá provozovat, ale pak je zapotřebí ručně nařídit import i takové "samozřejmosti" jako Kernel32.lib.
BTW Není potřeba to dopisovat do nastavení projektu, stačí do nějakého .cpp někam přidat následující zaklínadla. Někdy to má své výhody.
Kód: [Vybrat]
#pragma comment(lib,"Kernel32.lib")
#pragma comment(lib,"Gdi32.lib")

Jo, x14 - dík. Já mám pocit, že to tam je, to "nodefautlib" nastavené. Ntb s těmi W10 jsem nechal doma a teď jsem ještě v práci, takže nemám přesný popis, ale určitě to vyzkouším. Případně sem zítra písnu, a ještě se poradil.   :D

x14

  • ***
  • 182
    • Zobrazit profil
    • E-mail
Re:Visual Studio 2008 na Win7 nekompiluje
« Odpověď #11 kdy: 22. 06. 2018, 17:40:26 »
Tak to pozor, nodefautlib je opravdu hardcore volba. Nejde ani tak o to, že pak chybějí funkce z kernel32, user32, gdi32...
Ale hlavně tam není ani žádný runtime msvcrt.lib (pro C) a msvcp.lib (pro C++).
A to se pak dějí věci - NIC nefunguje! Chybí "entry point" - nikdo nezavolá winmain, nefungují floaty, globální proměnné nejsou přiřazené/nemají zavolané konstruktory, ...

Má to smysl asi jen pro pro dva speciální případy:
  • Generování co nejkratšího exáče z MSVC (dá se dostat na jednotky KB)
  • Eliminace něčeho, co je před WinMainem (např. natvrdo nastavené HeapSetInformation s HeapEnableTerminationOnCorruption, které už se nedá nikdy odvolat)
----------------------
P.S.: Samo se to tam určitě nenastavilo  ;)

Jeded Vojka

Re:Visual Studio 2008 na Win7 nekompiluje
« Odpověď #12 kdy: 22. 06. 2018, 19:15:31 »
x14: jo, tak teď už jsem doma. Takže: ignore default libraries mám "no"  :'(

Celý chybový výpis vypadá takhle:


1>------ Build started: Project: HP50GTTRS, Configuration: Release Win32 ------
1>Compiling...
1>cl : Command line warning D9035 : option 'Wp64' has been deprecated and will be removed in a future release
1>HP50GTTRS.cpp
1>.\HP50GTTRS.cpp(112) : warning C4996: '_swprintf': This function or variable may be unsafe. Consider using _swprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.
1>        C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\wchar.h(773) : see declaration of '_swprintf'
1>.\HP50GTTRS.cpp(221) : warning C4996: '_swprintf': This function or variable may be unsafe. Consider using _swprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.
1>        C:\Program Files (x86)\Microsoft Visual Studio 8\VC\include\wchar.h(773) : see declaration of '_swprintf'
1>Linking...
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__DispatchMessageW@4
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__CreateSolidBrush@4
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__DefWindowProcW@16
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__SendMessageW@16
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__CreatePen@12
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__CreateWindowExW@48
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__IsWindow@4
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__ShowWindow@8
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__RedrawWindow@16
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__EndDialog@8
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__Rectangle@20
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__CreateCompatibleBitmap@12
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__LoadIconW@8
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__CreateCompatibleDC@4
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__RegisterClassExW@4
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__TranslateMessage@4
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__GetDC@4
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__SelectObject@8
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__DeleteObject@4
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__BeginPaint@8
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__GetClientRect@8
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__LoadCursorW@8
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__DeleteDC@4
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__DialogBoxParamW@20
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__KillTimer@8
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__PostQuitMessage@4
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__GetMessageW@16
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__SetTimer@16
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__BitBlt@36
1>HP50GTTRS.obj : error LNK2001: unresolved external symbol __imp__EndPaint@8
1>D:\Pracovna\_MSVS 2008 My Projects\HP50G\HP50GTTRS\Release\HP50GTTRS.exe : fatal error LNK1120: 30 unresolved externals
1>Build log was saved at "file://d:\Pracovna\_MSVS 2008 My Projects\HP50G\HP50GTTRS\Release\BuildLog.htm"
1>HP50GTTRS - 31 error(s), 3 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Honza

Re:Visual Studio 2008 na Win7 nekompiluje
« Odpověď #13 kdy: 22. 06. 2018, 19:34:09 »
Tak SetTimer, TranslateMessage, ShowWindow, atd. jsou z User32.lib, čili přidat do linkování, a mělo by to chodit..


Jeded Vojka

Re:Visual Studio 2008 na Win7 nekompiluje
« Odpověď #14 kdy: 22. 06. 2018, 19:44:40 »
Tak SetTimer, TranslateMessage, ShowWindow, atd. jsou z User32.lib, čili přidat do linkování, a mělo by to chodit..

Přidáno User32.lib - bez efektu ..   :'(