Navzkrižno prevajanje v Visual Studiu v sistemu Windows: popoln vodnik

Zadnja posodobitev: 10/09/2025
Avtor: Isaac
  • Medosni sistemi z izvornim AOT niso podprti; x64↔ARM64 je podprt z ustrezno verigo orodij.
  • Visual Studio integrira MSBuild, CMake, Xamarin in VSTU za večplatformske delovne procese.
  • Strežnike za gradnjo je mogoče ustvariti brez VS s kopiranjem SDK-jev, registra in GAC-a.
  • Odpravljanje napak v Windows y Linux iz IDE-ja s CMakeSettings in povezavo SSH.

Vodnik za navzkrižno prevajanje z Visual Studio v sistemu Windows

Obvladovanje navzkrižnega prevajanja v Visual Studiu iz sistema Windows ni preprosto: obstajajo nianse med arhitekture, OS, verige orodij in povezovalci ki določajo, kaj je dovoljeno in česa ne. V tem praktičnem in podrobnem vodniku smo zbrali vse ustrezno znanje za konfiguriranje in navzkrižno prevajanje z Visual Studio, MSBuild in CMake, vključno s scenariji z izvornim AOT, mobilnim razvojem, večnamenskimi okolji in oddaljenim odpravljanjem napak v Linuxu.

Ideja je, da si že z enim samim branjem jasno predstavljate, kaj posamezna tehnologija podpira, kaj Komponente Visual Studia morate namestiti, kako pripraviti odvisnosti v Linuxu, katere poti in ključi registra so potrebni na strežnikih za gradnjo brez VS in kako premakniti isto kodo med Windowsi in Linuxom z uporabo integracije CMake in Visual Studia.

Kaj je navzkrižno prevajanje in resnične omejitve izvornega AOT-a?

Navzkrižno prevajanje je ustvarjanje binarnih datotek za platformo, ki ni tista, na kateri deluje prevajalnik, bodisi z sprememba operacijskega sistema ali arhitektureNa primer, ustvarjanje izvedljivih datotek za Windows iz Linuxa ali ciljanje na ARM64 iz gostitelja x64.

V kontekstu .NET z izvornim AOT postopek uporablja povezovalniki in knjižnice platform kombinirati prevedeno upravljano kodo z izvornimi odvisnostmi (statičnimi ali dinamičnimi). To uvaja pomembno omejitev: razpoložljivost povezovalcev in ciljnih knjižnic določa, kateri pari operacijskega sistema/arhitekture so izvedljivi.

Trenutno ni standardiziranega in podprtega načina za pridobitev izvornega kompleta SDK za macOS v sistemu Windows/Linux, kompleta SDK za Windows v sistemu Linux/macOS ali kompleta SDK za Linux v sistemu Windows/macOS. Zato, Izvorni AOT ne podpira navzkrižnega prevajanja med operacijskimi sistemiČe morate prevajati med različnimi operacijskimi sistemi, je praktičen način uporaba emulacije, virtualnega stroja ali WSL v sistemu Windows.

Prostor za izboljšave je pri navzkrižnem prevajanju med arhitekturami znotraj istega operacijskega sistema. Dokler namestite pravo orodje, je to mogoče. navzkrižno prevajanje med x64 in ARM64 v sistemih Windows, macOS ali Linux. To se najpogosteje uporablja, kadar želite ustvariti binarne datoteke ARM64 iz namiznega gostitelja x64.

Koncepti navzkrižnega prevajanja in AOT

Sistemske zahteve in orodja: Windows, macOS in Linux

Za uspešno navzkrižno prevajanje morate namestiti ustreznih izvornih orodij in njegovi pripomočki (povezovalniki, objcopy/strip, izvajalno okolje C, zlib itd.). Razpoložljivost se razlikuje glede na operacijski sistem in distribucijo.

Windows (x64 ↔ ARM64)Navzkrižno prevajanje iz sistema Windows x64 v sistem Windows ARM64 (in obratno) deluje tako, da namestite ustrezna orodja C++ Build Tools iz programa Visual Studio 2022. Če ciljate na ARM64, ne pozabite vključiti komponente «Orodja za gradnjo VS 2022 C++ ARM64/ARM64EC (najnovejše)»Če ciljate na x64, poiščite komponento «Orodja za gradnjo Visual Studio 2022 C++ x64/x86 (najnovejše)».

macOSXcode je privzeto opremljen z orodji x64 in ARM64, tako da lahko s standardno namestitvijo ciljate na obe arhitekturi. V tem okolju je Visual Studio za Mac in CMake se prav tako zanaša na te Apple orodjarna.

LinuxVsaka distribucija obravnava izvorne odvisnosti drugače. Potrebovali boste vsaj: povezovalec, ki lahko izpisuje cilj (npr. zvečka), komunalne storitve objcopy/strip združljivo s ciljem, če omogočite StripSymbolsin predmeti Izvajalno okolje C in zlib za ciljno arhitekturo.

  Kaj so tihi način, način Ne moti in letalski način v iPhonu

V Ubuntuju 22.04 amd64 je naslednje ukazi lahko zadostuje za linux-arm64 (ni dokumentirano ali zagotovljeno s strani Ubuntuja, vendar običajno deluje):

sudo dpkg --add-architecture arm64
sudo bash -c 'cat > /etc/apt/sources.list.d/arm64.list <<EOF
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy main restricted
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main restricted
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ jammy-backports main restricted universe multiverse
EOF'
sudo sed -i -e 's/deb http/deb [arch=amd64] http/g' /etc/apt/sources.list
sudo sed -i -e 's/deb mirror/deb [arch=amd64] mirror/g' /etc/apt/sources.list
sudo apt update
sudo apt install -y clang llvm binutils-aarch64-linux-gnu gcc-aarch64-linux-gnu zlib1g-dev:arm64

Zahteve orodne verige na sistem

Medplatformski razvoj z Visual Studiom: mobilne naprave, igre in UWP

Visual Studio ni omejen na namizni računalnik: omogoča vam ustvarjanje aplikacije za Android, iOS in Windows s C#, .NET, C++ ali celo HTML/JS. Kodo, nize in vire lahko delite med projekti, v nekaterih primerih pa se celo povežete z ogrodji, kot je Xamarin.Forms.

Če ciljate na Android/iOS/Windows z .NET, namestite možnost «Razvoj za mobile z .NET-om» (Xamarin). Dobili boste namenske predloge projektov, poln dostop do izvornih API-jev in produktivnost Visual Studia (oblikovalci, IntelliSense, emulatorji in delovanje na povezanih napravah). Poleg tega, Xamarin.Forms omogoča vam definiranje skupnega uporabniškega vmesnika, ki se izvorno upodablja na vsaki platformi.

Za poglobljeno igranje iger in grafiko ponuja Visual Studio Orodja za Unity (VSTU), ki vključuje urejanje in odpravljanje napak v skriptih C#. Trenutna izdaja dodaja podporo za Unity 2019.4, barvanje ShaderLab, izboljšano sinhronizacijo, celovitejše odpravljanje napak in izboljšano generiranje kode za MonoBehavior.

Če želite za svoj portfelj naprav Windows 10 uporabiti eno samo aplikacijo in prilagodljiv model vmesnika, lahko ustvarite aplikacijo UWPZačenši s predlogami UWP, Visual Studio olajša vizualno oblikovanje, predogled različnih oblikovnih faktorjev ter izbiro emulatorjev in simulatorjev v orodni vrstici.

Visual Studio za Android, iOS, Windows in Unity

Gradnja okolij brez Visual Studia na strežniku: več računalnikov

V podjetjih je pogosto potrebno imeti strežnike za gradnjo brez polnih licenc za Visual Studio. Notranje okolje za gradnjo je mogoče ustvariti tako, da na gostiteljski računalnik namestite Visual Studio in kopiranje datotek in nastavitev ekipi za gradnjo. Vendar vam to ne daje pravice do zunanje distribucije programske opreme ali ponujanja gradbenih okolij tretjim osebam.

Upoštevajte tudi, da je dokumentacija te korake preizkusila na sistemih, kot so Windows 8 (x86/x64), Windows 7 Ultimate in Windows Server 2008 R2 StandardPo zaključku postopka boste lahko prevajali namizne aplikacije C++ s kompletom za razvoj programske opreme (SDK) za Windows 8 ali aplikacijami VB/C# za ogrodje .NET Framework 4.5, vendar obstajajo izjeme: ne deluje za UWP niti za .NET Framework ≤ 4.0 brez dodatnih orodij.

PredpogojiImeti nameščen Visual Studio z delovno obremenitvijo «Razvoj namiznih sistemov .NET» na gostitelju. Na gradbenem računalniku namestite vsaj . NET Framework 4.5 (preveri registrski ključ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\Version).

Kopiraj SDK in orodja za WindowsZačenši s privzeto namestitveno potjo (%ProgramFiles %), rekurzivno kopira na gradbeni računalnik med drugim naslednje mape: Windows Kits 8.0 (bin, Catalogs, DesignTime, include, Lib, Redist, References), Microsoft SDKs Windows v8.0A (NETFX 4.0 Tools), Common Files\Merge Modules in ključne imenike ... VC in MSBuildUpoštevajte licenčne pogoje vsakega nameščenega kompleta, še posebej, če imate WDk/ADK.

Poleg tega premika določene datoteke, kot so Datoteke msobj110.dll, mspdb110.dll, mspdbcore.dll, mspdbsrv.exe, msvcdis110.dll, makehm.exe, VCVarsQueryRegistry.bat y vsvars32.batZa zagon binarnih datotek na strežniku za gradnjo (npr. testov) kopirajte tudi Izvajalna okolja Visual C++ (msvcp110.dll, msvcr110.dll, atl110.dll, vcamp110.dll itd.) v System32/SysWOW64, odvisno od arhitekture, in različice za odpravljanje napak iz Debug_NonRedist (msvcp110d.dll, msvcr110d.dll itd.).

  Odkrijte, kako umetna inteligenca spreminja Adobe Acrobat PDF

Zahtevani ključi registraZa konfiguracijo vrednosti MSBuild morate ustvariti vnose. Koren je odvisen od arhitekture: na x86, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft; na x64, HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft (v nadaljevanju %RegistryRoot%). Ustvarite naslednji niz (REG_SZ) vnosov, ki odražajo vrednosti, ki so na voljo na gostitelju:

%RegistryRoot%\.NETFramework\v4.0.30319\AssemblyFoldersEx\VCMSBuild Public Assemblies@(Default)
%RegistryRoot%\Microsoft SDKs\Windows\v8.0@InstallationFolder
%RegistryRoot%\Microsoft SDKs\Windows\v8.0A@InstallationFolder
%RegistryRoot%\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools@InstallationFolder
%RegistryRoot%\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools-x86@InstallationFolder
%RegistryRoot%\VisualStudio\11.0@Source Directories
%RegistryRoot%\VisualStudio\11.0\Setup\VC@ProductDir
%RegistryRoot%\VisualStudio\SxS\VC7@FrameworkDir32
%RegistryRoot%\VisualStudio\SxS\VC7@FrameworkDir64
%RegistryRoot%\VisualStudio\SxS\VC7@FrameworkVer32
%RegistryRoot%\VisualStudio\SxS\VC7@FrameworkVer64
%RegistryRoot%\VisualStudio\SxS\VC7@11.0
%RegistryRoot%\VisualStudio\SxS\VS7@11.0
%RegistryRoot%\Windows Kits\Installed Roots@KitsRoot
%RegistryRoot%\MSBuild\ToolsVersions\4.0\11.0@VCTargetsPath
%RegistryRoot%\MSBuild\ToolsVersions\4.0\11.0@VCTargetsPath10
%RegistryRoot%\MSBuild\ToolsVersions\4.0\11.0@VCTargetsPath11

Na računalnikih x64 doda tudi: %RegistryRoot%\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools-x64@NamestitvenaMapaČe uporabljate izvorni 64-bitni MSBuild (ali TFS Build Service na x64), dodajte te vnose v izvorni 64-bitni register: HKLM\PROGRAMSKA OPREMA\Microsoft\VisualStudio\11.0\Namestitev\VS@ProductDir in tri vrednosti HKLM\PROGRAMSKA OPREMA\Microsoft\MSBuild\Različice orodij\4.0\11.0 za VCTargetsPath, VCTargetsPath10 in VCTargetsPath11.

Okoljske spremenljivkeNeposredna pot je izvedba vcvarsall.bat iz ...\VC\vcvarsall.batCiljno verigo orodij lahko določite kot argument; če jo izpustite, se uporabi x86. To so ključni argumenti:

Prepir Vrsta prevajalnika Gostitelj Destinacija
x86 Izvorni 32-bitni x86, x64 x86
x86_amd64 Prehod na x64 x86, x64 x64
amd64 Izvorni 64-bitni x64 x64

Če želite, lahko prilagodite POT ročno dodajanje poti do imenikov Common7\IDE in 32/64-bitnih imenikov MSBuild, kot je ustrezno, čeprav z uporabo vcvarsall.bat Preprečuje, da bi pozabili.

GAC za sklope MSBuildV GAC-u so dodatni sklopi, ki jih MSBuild zahteva. Kopirajte z gostitelja v katero koli mapo na strežniku za gradnjo in registrirajte z gacutil -i (našli ga boste v Microsoft SDK-ji\Windows\v8.0A\bin\Orodja NETFX 4.0):

%ProgramFiles%\MSBuild\Microsoft.Cpp\v4.0\v110\Microsoft.Build.CPPTasks.Common.v110.dll
%ProgramFiles%\Microsoft Visual Studio\<versión>\<edición>\Common7\IDE\CommonExtensions\Microsoft\VC\Project\Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.dll
%ProgramFiles%\Microsoft Visual Studio\<versión>\<edición>\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.VCProjectEngine.dll

KompilacijaV ukazni vrstici strežnika lahko pokličete msbuild neposredno ali integrirati postopek v Azure cevovodi, ki samodejno izbere izvedljivo datoteko MSBuild, ki ustreza arhitekturi agenta. Osnovni primer bi bil: msbuild solution.sln.

Če potrebujete prenosno okolje za nadzor izvorne kode z različicami, lahko ustvarite "Depot» kopiranje imenikov v %Depot% in prilagajanje datotek MSBuild (Microsoft.CPP.Targets itd.) za referenco AssemblyFile=»$(VCTargetsPath11)Microsoft.Build.CppTasks.Common.v110.dll» namesto GAC, poleg uporabe Partner.AutoImports.props z lastnostmi, kot so PotCiljevVCTargets, potRazširitevMsBuild, ImenikNamestitveVCI y Imenik WindowsSdk, uvoženih na začetku vsakega projekta.

Gradite okolja brez Visual Studia

MSBuild, CMake in Pipelines: Podprte metode gradnje

Visual Studio omogoča prevajanje iz integriranega razvojnega okolja (IDE), pa tudi z MSBuild v CLI, CMake y Azure cevovodiVsaka metoda ponuja prednosti:

  • IDETakojšnje gradnje, integrirano odpravljanje napak, večnitno prevajanje in prilagajanje tipk.
  • CMakePoenoti sistem gradnje C++ med Linuxom in Windowsom brez projektov .vcxproj, idealno, če je vaša osnova že CMake.
  • MSBuild (CLI): prevaja brez namestitve celotnega Visual Studia, omogoča vzporedne gradnje in obsežno prilagajanje prek lastnosti in ciljev.
  • Azure cevovodiIntegrirajte CI/CD, izvajajte avtomatizirane teste in se prilagajajte v oblaku z zelo prilagodljivimi nalogami.

Znotraj integriranega razvojnega okolja (IDE) lahko prilagodite nastavitve glede na platformo (Windows ali Linux) in glede na način (Debug/Release) z možnostmi, kot so izhodni imeniki, dogodki po gradnji, odvisnosti projekta, dnevniki in zatiranje opozoril. Ta prilagodljivost je bistvena pri upravljanju več arhitektur ali orodij v isti rešitvi.

CMake Flow: Gradnja in odpravljanje napak v sistemih Windows in Linux iz Visual Studia

Za gradnje C++, ki uporabljajo CMake, Visual Studio omogoča enostavno odpiranje mape repozitorija (z CMakeLists.txt), samodejno ustvari predpomnilnik in konfigurira IntelliSense po ciljuOd tam lahko ustvarite eksplicitne konfiguracije (npr. x64-Debug), ki se ohranijo v CMakeSettings.json.

Tipičen potek se začne s kloniranjem projekta, na primer: git clone https://github.com/bulletphysics/bullet3.gitV programu Visual Studio odprite korenski seznam CMakeLists in po ustvarjanju predpomnilnika boste videli »pogled CMake Targets« s knjižnicami in izvedljivimi datotekami.

  Kako lahko popravite napako »Mobilna informacijska skupnost morda ne bo aktivirana« na iPhoneu

Za odpravljanje napak v sistemu Windows izberite ciljno izvedljivo datoteko (na primer AppBasicExampleGui.exe v kompletu za razvoj programske opreme Bullet), nastavi prelomno točko v ključni funkciji (npr. mouseButtonCallback) in ga zaženite s F5. Spremenljivke, objekte, niti in pomnilnik lahko pregledate z vgrajenim razhroščevalnikom.

Za Linux dodajte nastavitev «Linux-Debug» V nastavitvah CMakeSettings izberite generator »Unix Makefiles«, če je primerno, in se povežite z oddaljenim računalnikom prek SSH (Visual Studio upravlja ssh/rsync, gdb, naredi in CMake na gostitelju Linux). Potrebna so tipična orodja (build-essential, gdb, rsync, make, zip) in novejšo različico programa CMake (vsaj 3.8; Microsoft ponuja univerzalne binarne datoteke, ki jih lahko namestite z --prefix=/usr).

Če je aplikacija namizna aplikacija v sistemu Linux, jo bo morda treba izvoziti DISPLAYPridobite vrednost z echo $DISPLAY in dodaja launch.vs.json iz konfiguracije ustrezna predpona v pipeArgsNa primer, "export DISPLAY=:1;${debuggerCommand}" da se prepričam o tem gdb začnite s pravilnim grafičnim kontekstom.

Ko se binarna datoteka izvaja na oddaljenem računalniku, jo Visual Studio ob dosegu prekinitvene točke premakne v ospredje in prikaže sklad klicev (na primer povratni klici, kot je CommonRigidBodyBase::mouseMoveCallback, X11OpenGLWindow::pumpMessageitd.). Poleg tega boste videli konzolo z oddaljenim izhodom in po potrebi lahko pošljete standardni vhod.

Ta pristop vam omogoča iteracijo v enem samem integriranem razvojnem okolju (IDE) tako v sistemu Windows kot v Linuxu, hkrati pa ohranja Isti viri, različni nabori orodij in dosledno izkušnjo odpravljanja napak.

Dodatne opombe in premisleki

Upoštevajte uradne omejitve: Izvorni AOT ni podprt. med operacijskimi sistemi brez virtualizacije/emulacije, vendar s preklapljanjem arhitekture (x64 ↔ ARM64) znotraj istega operacijskega sistema s pravilno verigo orodij. V Linuxu bodite pozorni na pripomočke objcopy/strip ki jih uporabljate za podporo cilja, če ste jih aktivirali Simboli trakov.

V strežniških scenarijih preverite licenčni pogoji vsake komponente, ki jo kopirate (kompleti sistema Windows, WDK, ADK itd.). Microsoft opozarja, da so ti priročniki na voljo »takšni, kot so«, in da koraki morda ne bodo preizkušeni v vseh možnih konfiguracijah; priporočljivo je potrditi cevovod v vašem okolju, preden ga standardizirate.

Končno, ko v isti rešitvi konfigurirate več platform, jih poimenujte in ločite konfiguracije in izhodi (na primer različne mape glede na arhitekturo/OS), avtomatizirajte z MSBuild in, če je mogoče, vse integrirajte v eno Cevovod CI/CD z Azure Pipelines za doseganje ponovljivosti in sledljivosti.

S pravimi orodji, skrbno konfiguracijo MSBuild/CMake in podporo za IDE je izvedljivo ustvarjati binarne datoteke za različne arhitekture iz sistema Windows, orkestrirati gradnje na strežnikih brez VS in premikati isto kodo med sistemoma Windows in Linux z dosledno izkušnjo odpravljanja napak. produktivno za mešane ekipe.