- Käyttöjärjestelmien välistä toimintaa natiivilla AOT:lla ei tueta; x64↔ARM64 on tuettu asianmukaisella työkaluketjulla.
- Visual Studio integroi MSBuildin, CMaken, Xamarinin ja VSTU:n alustojen välisiä työnkulkuja varten.
- Build-palvelimia voidaan luoda ilman VS:ää kopioimalla SDK:t, rekisterin ja GAC:n.
- Virheenkorjaus sisään Windows y Linux IDE:stä CMakeSettings-asetuksilla ja yhteydellä SSH.
Ristikääntämisen hallitseminen Visual Studiossa Windowsissa ei ole triviaalia: siinä on vivahteita. arkkitehtuurit, käyttöjärjestelmät, työkaluketjut ja linkittimet jotka määrittelevät, mitä voi ja mitä ei voi tehdä. Tässä käytännöllisessä ja yksityiskohtaisessa oppaassa olemme koonneet kaiken olennaisen tiedon Visual Studion, MSBuildin ja CMaken konfigurointiin ja ristiinkääntämiseen, mukaan lukien skenaariot natiivin AOT:n kanssa, mobiilikehitys, usean koneen ympäristöt ja etävirheenkorjaus Linuxissa.
Ajatuksena on, että yhdellä lukemalla saat selkeän kuvan siitä, mitä kukin teknologia tukee, mitä Visual Studio -komponentit sinun on asennettava, miten riippuvuudet valmistetaan Linuxissa, mitä polkuja ja rekisteriavaimia tarvitaan koontipalvelimilla ilman VS:ää ja miten sama koodi siirretään Windowsin ja Linuxin välillä CMake- ja Visual Studio -integraation avulla.
Mitä on ristiinkääntäminen ja mitkä ovat natiivin AOT:n todelliset rajoitukset?
Ristikääntäminen tarkoittaa binääritiedostojen luomista muulle alustalle kuin sille, jolla kääntäjä toimii, joko käyttöjärjestelmän tai arkkitehtuurin muutosEsimerkiksi Windows-suoritettavien tiedostojen tuottaminen Linuxista tai ARM64:n kohdistaminen x64-isännästä.
.NETin ja natiivin AOT:n yhteydessä prosessi käyttää alustalinkittimet ja kirjastot yhdistää käännetyn hallitun koodin natiiveihin riippuvuuksiin (staattisiin tai dynaamisiin). Tämä tuo mukanaan tärkeän rajoituksen: ristiinlinkitysten ja kohdekirjastojen saatavuus määrää, mitkä käyttöjärjestelmä/arkkitehtuuriparit ovat käyttökelpoisia.
Tällä hetkellä ei ole standardoitua ja tuettua tapaa hankkia natiivia macOS SDK:ta Windowsiin/Linuxiin, Windows SDK:ta Linuxiin/macOS:ään tai Linux SDK:ta Windowsiin/macOS:ään. Siksi Natiivi AOT ei tue ristiinkääntämistä käyttöjärjestelmien välilläJos sinun täytyy kääntää eri käyttöjärjestelmien välillä, käytännöllinen tapa on käyttää emulointia, virtuaalikonetta tai WSL:ää Windowsissa.
Parannettavaa on saman käyttöjärjestelmän eri arkkitehtuurien ristiinkääntämisessä. Kunhan asennat oikean työkaluketjun, se on mahdollista. ristiinkääntää x64:n ja ARM64:n välillä Windowsissa, macOS:ssä tai Linuxissa. Tätä käytetään yleisimmin silloin, kun haluat tuottaa ARM64-binäärejä x64-työpöytäpalvelimelta.

Järjestelmävaatimukset ja työkalut: Windows, macOS ja Linux
Jotta ristiinkääntäminen onnistuisi, sinun on asennettava sopivat natiivit työkaluketjut ja sen apuohjelmat (linkittimet, objcopy/strip, C-ajonaikainen ohjelmointi, zlib jne.). Saatavuus vaihtelee käyttöjärjestelmän ja jakelun mukaan.
Windows (x64 ↔ ARM64)Ristikääntäminen Windows x64:stä Windows ARM64:ään (ja päinvastoin) toimii asentamalla oikeat C++ Build Tools -työkalut Visual Studio 2022:sta. Jos tähtäät ARM64:ään, varmista, että sisällytät komponentin «VS 2022 C++ ARM64/ARM64EC -koontityökalut (uusimmat)»Jos kohdistat x64-ympäristöön, etsi komponentti «Visual Studio 2022 C++ x64/x86 -koontityökalut (uusin)».
macOSXcode sisältää oletuksena x64- ja ARM64-työkaluketjut, joten voit kohdistaa molemmat arkkitehtuurit vakioasennuksella. Tässä ympäristössä Visual Studio for Mac ja CMake luottavat myös näihin Applen työkaluketjut.
LinuxJokainen jakelu käsittelee natiiveja riippuvuuksia eri tavalla. Tarvitset vähintään: linkerin, joka pystyy lähettämään kohteeseen (esim. kalahtaa), yleishyödylliset palvelut objcopy/strip yhteensopiva kohteen kanssa, jos otat sen käyttöön StripSymbolsja esineet C-ajonaikainen ja zlib kohdearkkitehtuurille.
Ubuntu 22.04 amd64:ssä seuraava komennot saattaa riittää linux-arm64 (Ubuntu ei ole dokumentoinut tai takaanut, mutta yleensä toimii):
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

Kehitystä eri alustoilla Visual Studiolla: mobiili, pelit ja UWP
Visual Studio ei rajoitu työpöytäympäristöön: sen avulla voit luoda sovellukset ja Android, iOS ja Windows C#:n, .NET:n, C++:n tai jopa HTML/JS:n kanssa. Voit jakaa koodia, merkkijonoja ja resursseja projektien välillä ja joissakin tapauksissa jopa rajapintoja frameworkien, kuten Xamarin.Forms, kanssa.
Jos kohdistat Androidiin/iOS:iin/Windowsiin .NET:iä käyttäen, asenna tämä vaihtoehto. «Kehitys mobile .NETin kanssa» (Xamarin). Saat käyttöösi omat projektipohjat, täyden pääsyn natiiveihin API-rajapintoihin ja Visual Studion tuottavuuden (suunnittelijat, IntelliSense, emulaattorit ja käyttö kytketyillä laitteilla). Lisäksi, Xamarin. Lomakkeet mahdollistaa yhteisen käyttöliittymän määrittämisen, joka toimii natiivisti kullakin alustalla.
Immersiivistä pelaamista ja grafiikkaa varten Visual Studio tarjoaa Työkalut Unitylle (VSTU), integroimalla C#-skriptien muokkauksen ja virheenkorjauksen. Nykyinen julkaisu lisää Unity 2019.4 -tuen, ShaderLab-värityksen, parannetun synkronoinnin, kattavamman virheenkorjauksen ja parannetun koodin luonnin MonoBehaviorille.
Jos haluat kohdistaa Windows 10 -laitevalikoimaasi yhdellä sovelluksella ja mukautuvalla käyttöliittymämallilla, voit luoda sovelluksen UWPUWP-malleista alkaen Visual Studio helpottaa visuaalista suunnittelua, erilaisten kokoonpanojen esikatselua ja emulaattoreiden ja simulaattoreiden valitsemista työkalupalkista.

Luo ympäristöjä ilman Visual Studiota palvelimella: monikone
Yrityksissä on yleistä tarvita koontipalvelimia ilman täysiä Visual Studio -lisenssejä. Sisäisen koontiympäristön voi luoda asentamalla Visual Studion isäntätietokoneelle ja tiedostojen ja asetusten kopioiminen rakennustiimille. Se ei kuitenkaan anna sinulle oikeutta jakaa ohjelmistoa ulkoisesti tai tarjota rakennusympäristöjä kolmansille osapuolille.
Huomaa myös, että dokumentaatio testasi näitä vaiheita järjestelmissä, kuten Windows 8 (x86/x64), Windows 7 Ultimate ja Windows Server 2008 R2 StandardKun prosessi on suoritettu, voit kääntää C++-työpöytäsovelluksia Windows 8 SDK:lla tai VB/C#-sovelluksilla .NET Framework 4.5:lle, mutta on olemassa poikkeuksia: se ei toimi UWP eikä .NET Framework ≤ 4.0:lle ilman lisätyökaluja.
edellytyksiäAsenna Visual Studio työkuorman mukana. «.NET-työpöytäsovellusten kehitys» isännässä. Asenna koontikoneelle ainakin .NET Framework 4.5 (vahvistaa rekisteriavaimen HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\Version).
Kopioi Windows SDK ja työkalutOletusasennuspolusta (%ProgramFiles%) alkaen se kopioi rekursiivisesti koontikoneelle muun muassa seuraavat kansiot: Windows Kits 8.0 (bin, Catalogs, DesignTime, include, Lib, Redist, References), Microsoft SDKs Windows v8.0A (NETFX 4.0 Tools), Common Files\Merge Modules ja tärkeimmät hakemistot. VC ja MSBuildNoudata jokaisen asennetun paketin lisenssiehtoja, erityisesti jos sinulla on WDk/ADK.
Lisäksi se siirtää tiettyjä tiedostoja, kuten msobj110.dll, mspdb110.dll, mspdbcore.dll, mspdbsrv.exe, msvcdis110.dll, makehm.exe, VCVarsQueryRegistry.bat y vsvars32.batJos haluat suorittaa binääritiedostoja koontipalvelimella (esim. testit), kopioi myös Visual C++ -ajoympäristöt (msvcp110.dll, msvcr110.dll, atl110.dll, vcamp110.dll jne.) System32/SysWOW64:ään arkkitehtuurista riippuen ja Debug_NonRedist-tiedoston debug-muunnelmista (msvcp110d.dll, msvcr110d.dll jne.).
Vaaditut rekisteriavaimetSinun on luotava merkintöjä MSBuild-arvojen määrittämiseksi. Juuri riippuu arkkitehtuurista: x86-järjestelmässä HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft; x64-järjestelmässä HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft (jäljempänä %RegistryRoot%). Luo seuraavat merkkijonomerkinnät (REG_SZ), jotka heijastavat isännässä käytettävissä olevia arvoja:
%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
X64-tietokoneissa se lisää myös: %RegistryRoot%\Microsoft SDK:t\Windows\v8.0A\WinSDK-NetFx40Tools-x64@AsennuskansioJos käytät natiivia 64-bittistä MSBuildia (tai TFS Build Serviceä x64-ympäristössä), lisää nämä merkinnät natiiviin 64-bittiseen rekisteriisi: HKLM\SOFTWARE\Microsoft\VisualStudio\11.0\Setup\VS@ProductDir ja kolme arvoa HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0\11.0 VCTargetsPathille, VCTargetsPath10:lle ja VCTargetsPath11:lle.
ympäristömuuttujatSuora tapa on toteuttaa vcvarsall.bat alkaen …\VC\vcvarsall.batVoit määrittää kohdetyökaluketjun argumenttina; jos jätät sen pois, käytetään x86-tiedostojärjestelmää. Nämä ovat tärkeimmät argumentit:
| perustelu | Kääntäjän tyyppi | Isäntä | Määränpää |
|---|---|---|---|
| x86 | Natiivi 32-bittinen | x86, x64 | x86 |
| x86_amd64 | Vaihto x64:ään | x86, x64 | x64 |
| amd64 | Natiivi 64-bittinen | x64 | x64 |
Jos haluat, voit säätää POLKU manuaalisesti lisäämällä polut Common7\IDE- ja 32/64-bittisiin MSBuild-hakemistoihin tarpeen mukaan, vaikkakin käyttämällä vcvarsall.bat Se estää sinua unohtamasta.
GAC MSBuild-kokoonpanoilleMSBuild vaatii GAC:ssa lisäkokoonpanoja. Kopioi isännästä mihin tahansa koontipalvelimen kansioon ja rekisteröidy gacutil -i (löydät sen tuosta Microsoft SDK:t\Windows\v8.0A\bin\NETFX 4.0 -työkalut):
%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
KokoelmaPalvelimen komentorivillä voit käynnistää msbuild suoraan tai integroi prosessiin Azure-putket, joka valitsee automaattisesti agentin arkkitehtuuria vastaavan MSBuild-suoritettavan tiedoston. Perusesimerkki olisi: msbuild solution.sln.
Jos tarvitset kannettavan, versioidun versionhallintaympäristön, voit luoda "varikko» hakemistojen kopiointi %Depot%-hakemistoon ja MSBuild-tiedostojen (Microsoft.CPP.Targets jne.) muokkaaminen viittaustiedostoiksi AssemblyFile=»$(VCTargetsPath11)Microsoft.Build.CppTasks.Common.v110.dll» GAC:n sijaan, a:n käytön lisäksi Partner.AutoImports.props ominaisuuksilla, kuten VCTargetsPath, MSBuildExtensionsPath, VCInstallDir y Windowsin Sdk-hakemisto, tuodaan jokaisen projektin alussa.

MSBuild, CMake ja putket: Tuetut koontimenetelmät
Visual Studiossa voit kääntää IDE:stä, mutta myös MSBuild komentorivillisessä (CLI), CTee y Azure-putketJokaisella menetelmällä on etuja:
- IDEPikakoonnukset, integroitu virheenkorjaus, monisäikeinen kääntäminen ja avainten mukauttaminen.
- CTeeYhtenäistää C++-koontijärjestelmän Linuxin ja Windowsin välillä ilman .vcxproj-projekteja, mikä on ihanteellista, jos pohjana on jo CMake.
- MSBuild (CLI): kääntyy ilman koko Visual Studion asentamista, mahdollistaa rinnakkaiset koonnit ja laajan mukauttamisen ominaisuuksien ja kohteiden avulla.
- Azure-putketIntegroi CI/CD, suorita automatisoituja testejä ja skaalaa pilvessä erittäin mukautettavien tehtävien avulla.
IDE-ympäristössä voit säätää asetuksia alustan (Windows tai Linux) ja tilan (Debug/Release) mukaan, esimerkiksi seuraavilla asetuksilla: tulostushakemistot, koontitapahtumat, projektin riippuvuudet, lokit ja varoitusten vaimennus. Tämä joustavuus on olennaista hallittaessa useita arkkitehtuureja tai työkaluketjuja samassa ratkaisussa.
CMake Flow: Käännös- ja virheenkorjaus Windowsissa ja Linuxissa Visual Studiosta
C++-koontiversioissa, jotka käyttävät CMakea, Visual Studio helpottaa repo-kansion avaamista (komennolla CMakeLists.txt), luo välimuisti automaattisesti ja konfiguroi IntelliSense kohteen mukaanSieltä voit luoda eksplisiittisiä määrityksiä (esim. x64-Debug), jotka säilyvät CMakeSettings.json.
Tyypillinen työnkulku alkaa projektin kloonaamisella, esimerkiksi: git clone https://github.com/bulletphysics/bullet3.gitAvaa Visual Studiossa CMakeList-juuritasot. Välimuistin luomisen jälkeen näet "CMake Targets View" -näkymän kirjastoineen ja suoritettavine tiedostoja.
Windows-käyttöjärjestelmän virheenkorjausta varten valitse kohdetiedosto (esimerkiksi AppBasicExampleGui.exe Bullet SDK:ssa), aseta keskeytyspiste avaintehtävässä (esim. mouseButtonCallback) ja käynnistä se painamalla F5. Voit tarkastella muuttujia, objekteja, säikeitä ja muistia sisäänrakennetulla virheenkorjaimella.
Linuxissa lisää asetus «Linux-virheenkorjaus» Valitse CMakeSettings-kohdasta "Unix Makefiles" -generaattori, jos sellainen on, ja muodosta yhteys etäkoneeseen SSH:n kautta (Visual Studio hallitsee ssh/rsync, gdb, make ja CMake Linux-isäntäkoneessa). Tavalliset työkalut vaaditaan (build-essential, gdb, rsync, make, zip) ja uudempi CMake-versio (vähintään 3.8; Microsoft tarjoaa yleismaailmallisia binääritiedostoja, jotka voit asentaa --prefix=/usr).
Jos sovellus on Linux-työpöytäsovellus, vienti voi olla tarpeen. NÄYTTÖSaat vastinetta rahalle echo $DISPLAY ja lisää siihen launch.vs.json konfiguraatiosta vastaava etuliite kohdassa pipeArgsEsimerkiksi, "export DISPLAY=:1;${debuggerCommand}" varmistaaksesi sen gdb aloita oikealla graafisella kontekstilla.
Kun binääritiedosto on käynnissä etäkoneella, Visual Studio tuo sen etualalle, kun keskeytyskohta saavutetaan, ja näyttää puhelupino (esimerkiksi takaisinkutsutoiminnot, kuten CommonRigidBodyBase::mouseMoveCallback, X11OpenGLWindow::pumpMessage, jne.). Lisäksi näet konsolin, jossa on etälähtö, ja voit lähettää tarvittaessa vakiotuloa.
Tämä lähestymistapa mahdollistaa iteroinnin yhdessä IDE:ssä sekä Windowsissa että Linuxissa säilyttäen samalla Samat lähteet, erilaiset työkaluketjut ja johdonmukainen virheenkorjauskokemus.
Lisähuomautuksia ja huomioitavia asioita
Huomaa viralliset rajoitukset: Natiivia AOT:ta ei tueta. käyttöjärjestelmien välinen ilman virtualisointia/emulointia, mutta arkkitehtuurin vaihtoa (x64 ↔ ARM64) saman käyttöjärjestelmän sisällä oikealla työkaluketjulla. Linuxissa on huomioitava, että apuohjelmat objcopy/strip jota käytät tavoitteen tukemiseksi, jos olet aktivoinut Nauhasymbolit.
Palvelintilanteissa tarkista lisenssiehdot jokaisesta kopioimastasi komponentista (Windows Kits, WDK, ADK jne.). Microsoft varoittaa, että nämä oppaat tarjotaan "sellaisenaan" ja että vaiheita ei välttämättä testata kaikissa mahdollisissa kokoonpanoissa; on suositeltavaa validoi putki ympäristössäsi ennen sen standardointia.
Lopuksi, kun määrität useita alustoja samaan ratkaisuun, nimeä ja erota ne konfiguroinnit ja lähdöt (esimerkiksi eri kansiot arkkitehtuuria/käyttöjärjestelmää kohden), automatisoi MSBuildilla ja integroi kaikki yhdeksi, jos mahdollista CI/CD-putkisto Azure Pipelines -alustojen avulla toistettavuuden ja jäljitettävyyden parantamiseksi.
Oikeilla työkaluketjuilla, huolellisella MSBuild/CMake-konfiguraatiolla ja IDE-tuella on mahdollista luoda binääritiedostoja eri arkkitehtuureille Windowsista, orkestroida koontiversioita palvelimilla ilman VS:ää ja siirtää samaa koodia Windowsin ja Linuxin välillä yhdenmukaisella virheenkorjauskokemuksella. tuottava sekajoukkueille.
Intohimoinen kirjoittaja tavujen maailmasta ja tekniikasta yleensä. Rakastan jakaa tietämykseni kirjoittamalla, ja sen aion tehdä tässä blogissa, näyttää sinulle kaikki mielenkiintoisimmat asiat vempaimista, ohjelmistoista, laitteistoista, teknologisista trendeistä ja muusta. Tavoitteeni on auttaa sinua navigoimaan digitaalisessa maailmassa yksinkertaisella ja viihdyttävällä tavalla.