Ukuthuthukisa ama-binary ku-C/C++ nge-GCC kanye ne-Clang

Isibuyekezo sokugcina: 14/01/2026
Author: Isaka
  • Isisekelo sokwenza ngcono okuhle ku-C/C++ ukuhlanganisa ngokunengqondo -marchamazinga -O kanye nezinketho ezithile eziphephile ezifana -pipe.
  • Amasu athuthukile njenge-LTO, i-PGO, i-OpenMP, noma i-Graphite anganikeza ukuthuthuka okukhulu, kodwa andisa ubunzima bokuhlanganiswa nokulungisa amaphutha.
  • Amafulegi aqina (i-FORTIFY, i-stack protector, i-PIE, i-relro/now) aqinisa ukuphepha ukuze athole ukulahlekelwa okuthile kokusebenza.
  • I-CMake kanye namajeneretha ahlukahlukene akuvumela ukuthi ugcine ikhodi ephathekayo kuwo wonke amapulatifomu e-GCC, e-Clang, e-MSVC nakwamanye ngaphandle kokuthinta ikhodi yomthombo.

Ukuthuthukisa ama-binaries e-C kanye ne-C++ nge-GCC kanye ne-Clang

Uma uqala ukudlala nge izinketho zokuhlanganisa ku-C naku-C++ Kulula ukuwela esilingweni sokuvumela wonke amafulegi "apholile" owabona ku-inthanethi. Kodwa iqiniso liwukuthi inhlanganisela embi yamapharamitha ingenza uhlelo lwakho lungazinzile, luphule ukwakheka, noma okubi nakakhulu, lukhiqize ama-binary ahluleka ngezindlela ezicashile kakhulu noma adinga ukukhishwa kolwazi; kulezo zimo, kungaba wusizo. khipha umbhalo ofihliwe kuma-binaries ukuphenya.

Inhloso yalo mhlahlandlela ukuthi uqonde, ngendlela engokoqobo neqondile, ukuthi kanjani Ukuthuthukisa ama-binary ku-C/C++ nge-GCC kanye ne-Clang ukusebenzisa izinketho ezifanele: kusukela kwezijwayelekile -O2, -march y -pipe...kumasu athuthukile njenge-LTO, i-PGO, i-OpenMP, i-Graphite, kanye nokuqina kokuphepha. Uzobona nokuthi konke lokhu kuhambisana kanjani ne-CMake, i-MinGW/MSYS2, i-Visual Studio, i-Xcode, noma i-Ninja ukwakha indawo ephathekayo nengagcinwa.

Yini i-CFLAGS ne-CXXFLAGS nokuthi ungayisebenzisa kanjani ngaphandle kokuphazamisa izinto?

Cishe kuzo zonke izinhlobo zezinhlelo Unix (Linux, i-BSD, njll.) kusetshenziswa iziguquguquko CFLAGS y CXXFLAGS ukudlula izinketho ku-compiler ye-C ne-C++. Aziyona ingxenye yanoma iyiphi indinganiso esemthethweni, kodwa zivame kakhulu kangangokuthi noma yiluphi uhlelo lokwakha olubhalwe kahle (Make, Autotools, CMake, Meson…) luyazihlonipha.

Ekusabalalisweni okufana ne-Gentoo, lezi ziguquguquko zichazwa emhlabeni jikelele ku- /etc/portage/make.confUkusuka lapho, zizuzwa yiwo wonke amaphakheji ahlanganiswe ne-Portage. Kwezinye izinhlelo, ungazithumela kugobolondo noma uzifake ku-... Makefile, a iskripthi kusuka ku-CMake noma okufanayo.

Kuvamile ukuchaza CXXFLAGS ukusebenzisa kabusha okuqukethwe kwe- CFLAGS futhi, uma kudingeka, engeza noma yiziphi izinketho ezithile ze-C++. Isibonelo: CXXFLAGS="${CFLAGS} -fno-exceptions"Into ebalulekile ukungafaki amafulegi ngokungakhethi lapho, ngoba azosetshenziswa kukho konke okuhlanganisayo.

Kubalulekile ukukucacisa lokho Izinketho ezinolaka ku-CFLAGS/CXXFLAGS zingaphula ukwakhekaLokhu kungaletha amaphutha okunzima kakhulu ukuwalungisa noma ngisho nokubambezela ijubane lama-binary. Amazinga aphezulu okwenza ngcono awahlali eholela ekusebenzeni okungcono, futhi ezinye izinguquko zingasebenzisa ukucabanga ukuthi ikhodi yakho ayihlangabezani.

Ukulungiswa okuyisisekelo: amazinga -march, -mtune kanye ne-O

Isisekelo sanoma yikuphi ukulungiswa okunengqondo sihilela izingcezu ezintathu: Khetha ukwakheka kwe-CPU, khetha izinga lokwenza ngcono, futhi ngezinye izikhathi usebenzise izithuthukisi ezincane ezingenangozi. njengoba -pipeCishe konke okunye kufanele kuze kamuva, futhi ngekhanda elicacile.

Ukukhetha izakhiwo: -mashi, -mtune kanye nenkampani

Okukhethwa kukho -march=<cpu> itshela i-GCC/Clang ukuthi yimuphi umndeni weprosesa othize kuthanda khiqiza ikhodiIvumela ukusetshenziswa kwemiyalelo ethile (i-SSE, i-AVX, i-AVX2, i-AVX-512, njll.) kanye nokulungiswa kwe-ABI. Uma uhlakaniphe kakhulu futhi ukhetha i-CPU yesimanje kakhulu, i-binary ngeke iqale ukusebenza emishinini emidala.

Ukuze uthole ukuthi yini esekelwa yiprosesa yakho, ku-Linux ungaxhumana /proc/cpuinfo noma sebenzisa imiyalo kusukela ku-compiler yesitayela uqobo gcc -Q -O2 --help=targetEzinhlelweni zesimanje ze-x86-64, amaphrofayili ajwayelekile abekwe ezingeni elifanayo njenge x86-64-v2, x86-64-v3 y x86-64-v4ukuthi yiliphi iqembu elanda amasethi emiyalelo futhi elisekelwe kusukela ku-GCC 11.

Ngaphezu kwalokho -march, ikhona -mtune=<cpu> "ukulungisa" ukuhlela kusuka kukhodi kuya kumodeli ethile ngaphandle kokusebenzisa imiyalelo emisha. Ziphinde zivele kuzakhiwo ezingezona ze-x86 -mcpu y -mtune izinketho ezifanele zifaka phakathi (i-ARM, i-PowerPC, i-SPARC…). Ku-x86, -mcpu Empeleni isiphelelwe yisikhathi.

Icebo elivame ukusetshenziswa yileli -march=nativeLokhu kuvumela i-compiler ukuthi ibone i-CPU yomshini wendawo futhi isebenze ngokuzenzakalelayo izandiso ezifanele. Lokhu kulungile ezindaweni lapho uzosebenzisa khona ama-binary kumshini ofanayo lapho uwahlanganisa khona, kodwa kuyisithiyo sokufa uma ukhiqiza amaphakheji amanye ama-CPU.

Kumaprosesa akamuva e- Intel Futhi i-AMD, i-GCC ifaka amagama athile omndeni ngamunye, njengokuthi -march=rocketlake, -march=sapphirerapids, -march=znver2 o -march=znver3Lezi zinketho zihlanganisa imiyalelo ethuthukisiwe (i-AVX2, i-AVX-512, i-FMA, njll.) yesizukulwane ngasinye futhi zikuvumela ukuthi uthole okuningi kulokho. hardware uma wazi ukuthi uzothumela kuphi.

Amazinga okuthuthukisa -O: nini ukusebenzisa ngalinye

Okukhethwa kukho -O ilawula izinga eliphelele lokwenza ngcono isetshenziswa kukhodi. Isinyathelo ngasinye senza kube lula ukushintshashintsha okubanzi, okuthinta isikhathi sokuhlanganiswa kanye nokusetshenziswa kwememori kanye nokulula kokulungisa amaphutha.

  • -O0Akulungiselelwe. Lena inketho ezenzakalelayo uma ungacacisi lutho. Ihlanganisa ngokushesha futhi ikhiqize ikhodi okulula kakhulu ukuyilungisa, kodwa ihamba kancane futhi inkulu. Ilungele ukuthuthukiswa kwasekuqaleni nokuphenya amaphutha ayinkimbinkimbi.
  • -O1Izinga lokuqala lokwenza ngcono. Kusebenzisa ukuthuthukiswa okungabizi kakhulu okuvame ukunikeza ukuthuthukiswa kokusebenza okuhle ngaphandle kokwenza ukuhlanganiswa kube nzima kakhulu.
  • -O2: yizinga elinconywayo lokusetshenziswa okuvamile kumaphrojekthi amaningi. Kuthola ibhalansi enhle phakathi kokusebenza, isikhathi sokuhlanganiswa, kanye nokuzinza., yingakho kuyinani elisetshenziswa ukusatshalaliswa okuningi ngokuzenzakalelayo.
  • -O3: ivuselela konke ukulungiswa kwe- -O2 Ukuguqulwa okunamandla kakhulu, njengokuvuleka kwe-loop okunamandla kakhulu noma ukwenziwa kwe-vector okunamandla kakhulu. Lokhu kungasebenza kahle kwenye ikhodi yezinombolo, kodwa futhi kungenzeka kakhulu ukuthi kwembulwe i-UB kukhodi noma kukhulise usayizi osebenzisekayo.
  • -OsLokhu kuzama ukunciphisa usayizi we-binary ngokubeka isikhala phambili kunesivinini. Kuwusizo ezindaweni ezine- isitoreji noma i-cache elinganiselwe kakhulu.
  • -Oz (GCC 12+): ithatha ukonga usayizi ngokweqile, yamukela ukwehla okukhulu kokusebenza. Iwusizo kuma-binary amancane kakhulu noma ezimweni ezithile kakhulu.
  • -OfastKufana ne- -O3 Ayilandeli ngokuqinile amazinga e-C/C++. Ikuvumela ukuthi wephule ezinye iziqinisekiso zolimi ukuze uthole ukusebenza okwengeziwe, ikakhulukazi ekubalweni kwe-floating-point. Kumelwe uyisebenzise ngokuqonda okugcwele kwalokho okwenzayo.
  • -OgYakhelwe ukulungisa amaphutha. Isebenza kuphela ukulungiswa okungaphazamisi kakhulu i-debugger futhi ishiya ikhodi phakathi nendawo phakathi -O0 y -O1.

Amazinga angaphezulu -O3 njengoba -O4 o -O9 Bonke bayintuthu nezibukoUmhlanganisi uyazamukela kodwa ngaphakathi uziphatha njenge -O3Akukho mlingo ofihliwe lapho, ukuma nje.

  I-Valve ikhipha i-Team Fortress 2 SDK futhi iguqule umphakathi we-mod

Uma uqala ukubona izakhiwo ezihluleka ngendlela engaqondakali, ukuphahlazeka okungajwayelekile, noma imiphumela ehlukene kuye ngokuthi i-optimizer iyini, isinyathelo esihle sokuxilonga yilesi yehla okwesikhashana uye ku -O1 noma ngisho -O0 -g2 -ggdb ukuthola ama-binary angalungiswa kalula futhi ubike iphutha ngolwazi oluwusizo.

-ipayipi nezinye izinketho eziyisisekelo

ifulege -pipe utshela umhlanganisi ukuthi asebenzise amapayipi enkumbulweni Esikhundleni samafayela esikhashana kudiski phakathi kwezigaba zokuhlanganisa (ukucubungula kwangaphambili, ukuhlanganisa, ukuhlanganisa). Ngokuvamile kwenza inqubo isheshe kancane, yize idla i-RAM eningi. Emishinini enememori encane kakhulu, ingabangela ukuthi uhlelo lushayeke i-compiler, ngakho-ke isebenzise kancane kulezo zimo.

Ezinye izinketho zendabuko ezifana -fomit-frame-pointer Zikuvumela ukuthi ukhulule irejista ye-stack pointer ukuze ukhiqize ikhodi eyengeziwe, kodwa zenza kube nzima ukulungisa amaphutha nge-backtraces ehlanzekile. Kuma-architecture esimanje e-x86-64, i-compiler iphatha kahle lokhu, futhi ngokuvamile akudingekile ngisho nokukusetha ngesandla.

Izandiso ze-SIMD, i-Graphite, kanye ne-loop vectorization

Ama-compilers esimanje e-x86-64 avumela ngokuzenzakalelayo imiyalelo eminingi ye-SIMD kuye nge-CPU ekhethiwe ene- -marchNoma kunjalo, uzobona amafulegi afana nokuthi -msse2, -mavx2 noma ezifanayo ezingangezwa ngokusobala.

Ngokuvamile, uma usebenzisa -march Lokhu kufanelekile; awudingi ukukusebenzisa ngesandla. -msse, -msse2, -msse3, -mmmx o -m3dnowngoba sezivele zinikwe amandla ngokuzenzakalelayo. Kunengqondo ukuziphoqelela kuma-CPU athile kakhulu lapho i-GCC/Clang ingaziniki amandla ngokuzenzakalelayo.

Kuma-loop ayinkimbinkimbi, i-GCC ifaka isethi yokulungiselela I-Graphiteezithembele kulabhulali ye-ISL. Ngokusebenzisa amafulegi afana nalawa -ftree-loop-linear, -floop-strip-mine y -floop-block Umhlanganisi uhlaziya ama-loop futhi angawahlela kabusha ukuze athuthukise indawo yedatha kanye nokuhambisana kwayo; ezimweni ezithile, bheka izibonelo zezinga eliphansi C Kuyasiza ukuvumelanisa ikhodi yalezi zinguquko.

Lokhu kuguqulwa kungaveza imiphumela emihle kukhodi yezinombolo esindayo, kodwa Aziyona ingoziZingakhulisa kakhulu ukusetshenziswa kwe-RAM ngesikhathi sokuhlanganiswa futhi zibangele ukuphahlazeka kumaphrojekthi amakhulu angaklanywanga engqondweni yazo. Ngakho-ke, kunconywa ukuthi zisebenze kuphela kuma-snippets noma kumaphrojekthi athile lapho zihlolwe futhi zafakazelwa ukuthi zisebenza kahle.

Ukufana: Ama-loop e-OpenMP, -fopenmp kanye ne-ftree-parallelize

Uma ikhodi yakho isebenzisa I-OpenMPBobabili i-GCC ne-Clang banikeza ukwesekwa okuqinile ngokusebenzisa inketho -fopenmpLokhu kuvumela izingxenye zekhodi, ikakhulukazi ama-loop, ukuthi zihambisane kusetshenziswa iziqondiso kukhodi yomthombo uqobo, kanye nokuthi umhlanganisi akhiqize umsebenzi ngemicu eminingi.

Ngaphezu kwalokho -fopenmpI-GCC ifaka phakathi inketho -ftree-parallelize-loops=N, kuphi N Ngokuvamile kusethwa enanini lama-core atholakalayo (isibonelo usebenzisa $(nproc) (kuma-scripts okwakha). Lokhu kuzama ukwenza ama-loop ahambisane ngokuzenzakalelayo ngaphandle kwesidingo sokwengeza iziqondiso ezenziwe ngesandla, yize impumelelo incike kakhulu endleleni ikhodi ebhalwa ngayo.

  Gcwalisa umhlahlandlela wokuvula nokusebenzisa isiphathi somsebenzi ku-Chromebook

Kufanele ugcine engqondweni ukuthi Ukunika amandla i-OpenMP emhlabeni wonke kulo lonke uhlelo kungaba yinkinga enkuluAmanye amaphrojekthi awakulungele lokho, amanye asebenzisa amamodeli awo e-concurrency, kanti amanye ahluleka ukuhlanganisa lapho ehlangana nakho. -fopenmpInto enengqondo okufanele uyenze ukuyivumela ngephrojekthi ngayinye noma ngisho ngemodyuli ngayinye, hhayi kuma-CFLAGS omhlaba wonke wesistimu.

Ukulungiswa kwesikhathi sesixhumanisi: i-LTO

La Ukuthuthukiswa Kwesikhathi Sesixhumanisi (i-LTO) Ivumela i-compiler ukuthi ingagcini kufayela elilodwa lomthombo lapho ilungiselela, kodwa ibone lonke uhlelo esigabeni sokuxhumanisa futhi isebenzise ukulungiswa komhlaba wonke kuzo zonke izinto ezihilelekile.

Ku-GCC kuyasebenza nge -fltofuthi inani lemicu lingachazwa, isibonelo -flto=4, noma uyivumele ithole inani lama-cores ane -flto=autoUma isetshenziswa futhi -fuse-linker-plugin kanye ne-linker igolide Futhi nge-plugin ye-LTO efakwe kuma-binutils, i-compiler ingakhipha ulwazi lwe-LTO ngisho nasemalabhulali angaguquki ahilelekile ekubopheni.

I-LTO ivame ukukhiqiza zincane kancane futhi, ezimweni eziningi, ama-executable asheshayongoba isusa ikhodi efile futhi ivumela ukuhlangana phakathi kwamamojula. Njengokubuyisela, el tiempo Izikhathi zokuhlanganiswa kanye nokusetshenziswa kwememori kuyanda kakhulu, ikakhulukazi kumaphrojekthi amakhulu anamafayela ezinto ayizinkulungwane.

Ezindaweni ezifana neGentoo, lapho lonke uhlelo luhlanganiswa khona kusukela emthonjeni, ukusebenzisa i-LTO emhlabeni jikelele kusabhekwa njengendaba ebucayi: Kuneziphakheji eziningi ezingasasebenzi kahle ne-LTO. futhi kudinga ukuyikhubaza ngokukhetha. Yingakho ngokuvamile kunconywa ukuthi uyivule kuphela kumaphrojekthi athile noma ukwakhiwa kwe-GCC/Clang lapho inzuzo ibonakala khona ngempela.

I-PGO: Ukuthuthukiswa Okuqondiswa Iphrofayili

La Ukulungiswa okuqondiswa yiphrofayela (i-PGO) Kuhlanganisa ukuhlanganisa uhlelo kanye ngezinsimbi, ukulusebenzisa ngemithwalo yemisebenzi emele ukuqoqa izibalo zokusebenza, bese uluhlanganisa kabusha usebenzisa lawo maphrofayili ukuqondisa i-optimizer.

Ku-GCC ukugeleza okuvamile yilokhu: qala ngokuhlanganisa -fprofile-generatesebenzisa uhlelo (noma izivivinyo zalo) ukuze ukhiqize idatha yephrofayela, bese hlanganisa ne -fprofile-use ekhomba kufolda lapho amafayela ephrofayela agcinwa khona. Ngezinketho ezengeziwe ezifana -fprofile-correction noma ngokukhubaza izaziso ezithile (-Wno-error=coverage-mismatch) amaphutha avamile avela ekushintsheni kwekhodi phakathi kwezigaba angagwenywa; futhi ngokuvamile kuyasiza Gada ukusebenza nge-eBPF kanye nokusebenza kahle ukuthola amaphrofayili anembile.

Uma isetshenziswa kahle, i-PGO ingakwazi ukuhlinzeka ngentuthuko yokusebenza enkulu kakhulu kunokukhulisa nje izinga -ONgoba yenza izinqumo ngokusekelwe kudatha yokusebenza yangempela, hhayi kumamodeli ajwayelekile. Inkinga ukuthi kuyinqubo enzima: kufanele iphindwe ngazo zonke izibuyekezo zekhodi ezifanele, futhi incike kakhulu esimweni sokuhlola esimele ukusetshenziswa kwangempela.

Amanye amaphrojekthi (kufaka phakathi i-GCC ngokwayo ekusakazweni okuthile) asevele enikeza amafulegi noma izikripthi ezithile ukwenza i-PGO isebenze ngokuzenzakalelayo, kodwa ngokuvamile ihlala iyindlela yabasebenzisi abathuthukile abazimisele ukutshala isikhathi kule nqubo.

Ukuqina: ukuphepha okusekelwe efulegini

Ngale kwesivinini, izindawo eziningi zigxila ekuqiniseni ama-binary ngokumelene nobuthakathaka, ngisho noma kungabiza ukulahlekelwa ukusebenza okuthile. I-GCC kanye nama-linkers anamuhla anikeza uhla oluhle lwe- izinketho zokuqinisa okungase kusebenze kusuka ku-CFLAGS/CXXFLAGS kanye ne-LDFLAGS.

Ezinye ezivame kakhulu Yilezi:

  • -D_FORTIFY_SOURCE=2 o =3: ingeza ukuhlolwa okwengeziwe emisebenzini ethile ye-libc ukuthola ukugcwala kwe-buffer ngesikhathi sokusebenza.
  • -D_GLIBCXX_ASSERTIONS: ivula ukuhlolwa kwemingcele ezitsheni kanye nezintambo ze-C++ ku-STL, ithola ukufinyelela okungaphandle kwebanga.
  • -fstack-protector-strong: ifaka ama-canaries esitaki ukuze ithole ukuthi abhala ukuthi ayayona.
  • -fstack-clash-protection: kunciphisa ukuhlaselwa okusekelwe ekungqubuzaneni phakathi kwe-stack nezinye izifunda zememori.
  • -fcf-protection: ingeza ukuvikelwa kokugeleza kokulawula (isb., ekuhlaselweni yi-ROP) ezakhiweni ezikusekelayo.
  • -fpie kanye -Wl,-pie: ikhiqiza ama-executable afaneleka ukubekwa, adingekayo kwi-ASLR esebenzayo.
  • -Wl,-z,relro y -Wl,-z,nowZiqinisa itafula lokufuduka futhi zivimbele ukubopha okuvilaphayo izimpawuukuvimbela ama-vector athile okuhlasela.
  I-Fusion 360 vs. Solid Edge vs. CATIA: Iyiphi Isofthiwe Ye-CAD Ekulungele?

Amaphrofayili "aqinile" okunye ukusatshalaliswa asevele enazo eziningi zalezi zinketho ezivuliwe ngokuzenzakalelayo. Ukuzisebenzisa ngesandla ngaphandle kokuqonda umthelela kungaholela ezibalweni ezimbili ezihamba kancane kakhulu., ikakhulukazi ezinhlelweni zokusebenza ezinkulu noma ezigcina inkumbulo kakhulu, kodwa kumaseva abonakalayo noma kuma-desktop abucayi ngokuvamile kuyintengo efanelekile.

Khetha i-compiler kanye nendawo: GCC, Clang, MSVC, MinGW, Xcode…

Empeleni, uvame ukungakhethi nje amafulegi, kodwa Yimuphi umqoqi kanye ne-toolchain ephelele ozoyisebenzisa? kupulatifomu ngayinye. I-GCC ne-Clang zivame ukufana kakhulu ngokusebenza, futhi umehluko ubonakala kakhulu ekuxilongweni, ezikhathini zokuhlanganiswa, noma ekuvumelaneni nezandiso ezithile.

En Windows Unemizila eminingana: I-Visual Studio (MSVC) ngamasethi abo amathuluzi v143, v142njll.; noma I-MinGW-w64 ngokusebenzisa I-MSYS2 okukunikeza i-Windows GCC kanye ne-Clang kanye nemitapo yolwazi ye-Win32 edingekayo. I-MSYS2 iphathwa nge pacman futhi inikeza izindawo ze-MinGW64 (ezisekelwe ku-MSVCRT yakudala) kanye ne-UCRT64 (ene-Universal CRT, yesimanje kakhulu).

Ku-macOS indlela ejwayelekile yile I-Xcode nge-clang/clang++, lapho umqondo oyinhloko uwukuthi I-SDK eyisisekelo (inguqulo yesistimu ehlanganiswe ngayo) kanye Ithagethi Yokuthunyelwa (inguqulo encane ye-macOS ofuna uhlelo lwakho lokusebenza lusebenze kuyo). Ukulungisa kahle lokhu kuhlanganisa kugwema inhlekelele yakudala yokuhlanganisa inguqulo yakamuva yesistimu kuphela kanye nokuba ama-binary akho ahluleke ukusebenza ezinguqulweni ezindala kancane.

Ku-Linux, into evamile okufanele uyenze ukusebenzisa I-GCC kanye ne-Make noma i-NinjaMhlawumbe usebenzisa i-CMake njenge-meta-generator. Ngaphezu kwalokho, ukusatshalaliswa okufana ne-Ubuntu kukuvumela ukuthi ufake izinguqulo eziningi ze-GCC bese uzikhetha nge update-alternatives, ngendlela oyisebenzisa ngayo ku-macOS xcode-select ukushintsha kusuka ku-Xcode.

Uma udinga izindawo zokulungisa amaphutha ezikhululekile zamaphrojekthi akhiqizwe nge-Make noma i-Ninja (okuyi-single-configuration), I-Eclipse CDT y I-Visual Studio Code Lezi izinketho ezimbili eziwusizo kakhulu: I-CMake ingakhiqiza amafayela ephrojekthi owadingayo noma iwahlanganise ngqo ukuze ilungiselele, ihlanganise, futhi ilungise amaphutha.

Ukuphatheka kanye ne-CMake: ikhodi efanayo, ama-toolchain ahlukene

Ukuthola iphrojekthi ye-C/C++ ukuze ihlanganiswe ngaphandle kokuthinta ikhodi ku-Windows, Linux, kanye ne-macOS kudinga inhlanganisela enhle yakho kokubili. I-CMake, ama-generator atholakalayo kanye nama-compilers ahlukeneUmqondo uwukuthi ifayela CMakeLists.txt Chaza iphrojekthi ngendlela engaqondakali bese i-CMake izokhiqiza uhlobo lwephrojekthi olufanele epulatifomu ngayinye.

Ku-Windows ungabiza i-CMake nge -G "Visual Studio 17 2022" ukukhiqiza ikhambi nge-msbuild, noma nge- -G "Ninja" ukuze kube nokwakhiwa okusheshayo kusuka kukhonsoli. Ngaphezu kwalokho, ngokusebenzisa -T v143, v142njll., ukhetha i-Platform Toolset (inguqulo ye-MSVC compiler) bese usebenzisa -A x64, Win32 o arm64 Ukhetha ukwakheka kwezakhiwo.

Nge-MinGW/MSYS2, into evamile ukuyisebenzisa -G "MinGW Makefiles" o -G "Ninja" futhi, ngokusebenzisa iziguquguquko CMAKE_C_COMPILER y CMAKE_CXX_COMPILERKhetha ukuthi ufuna i-GCC noma i-Clang. Kulesi simo, ukucushwa (ukulungisa iphutha, ukukhishwa, njll.) kulawulwa nge- -DCMAKE_BUILD_TYPE, njengoba i-Make ne-Ninja ziwukulungiselelwa okukodwa.

Ku-macOS, -G Xcode Ikunikeza iphrojekthi ephelele yokulungisa amaphutha ku-IDE, futhi ungalawula i-SDK kanye ne-Deployment Target ngeziguquguquko ezifana CMAKE_OSX_DEPLOYMENT_TARGETUma ufuna i-Make noma i-Ninja kuphela, usebenzisa ama-generator afanayo nalawo aku-Linux.

Ubuhle bakho konke lokhu ukuthi, uma usethwe kahle, ungagcina i-codebase eyodwa kanye nesethi yamafulegi ahambisanayo (ngezinye izikhathi aqondene neplatifomu) futhi uhlanganise kunoma iyiphi indawo ngaphandle kokuchitha isikhathi esiningi usebenzisa ikhodi yomthombo. Kodwa-ke, kubalulekile ukukhumbula isimiso esiyinhloko: Okokuqala, qiniseka ukuthi isebenza kahle, bese sizosheshisa inqubo yokwenza ngcono..

Uma konke kubonwa, umqondo ojwayelekile ukunamathela inhlanganisela elinganiselayo kodwa ephumelelayo (into efana nale) -O2 -march=<cpu adecuada> -pipe kanye nokuqina okuthile okunengqondo) bese ubhuka izibhamu ezinkulu — i-LTO, i-PGO, i-Graphite, i-OpenMP enamandla— kulawo maphrojekthi noma amamojula lapho ukuthuthukiswa kulinganiswa khona ngempela futhi izindleko zokulungisa nokulungisa amaphutha ezilethayo zamukelwa.

Gada ukusebenza nge-eBPF kanye ne-bpftrace
I-athikili ehlobene:
Ukuqapha ukusebenza nge-eBPF, i-bpftrace kanye ne-perf ku-Linux