c ++ - Boost bibliotek navn mangler version tag

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har bygget boost i henhold til dokumentationen ved hjælp af:


bjam.exe toolset=msvc-9.0 variant=release link=shared stage


Dette giver mig alle biblioteker i mappefasen. Jeg får 3 filer til hver boost-pakke, for eksempel: boost\_regex-vc90-mt-1\_45.dll
boost\_regex-vc90-mt-1\_45.lib
boost\_regex-vc90-mt.lib



Hvad er lib-filen uden versions-tag? Hvad er forskellen mellem boost\_regex-vc90-mt-1\_45.lib og boost\_regex-vc90-mt.lib?


Fremhævningsdokumentationen angiver følgende:

'Udvidelse: bestemt efter operativsystemets sædvanlige konvention. På de fleste platforme i Unix-stil er udvidelserne .a og .so for henholdsvis statiske biblioteker (arkiver) og delte biblioteker. På Windows angiver .dll et delt bibliotek og .lib angiver et statisk eller importeret bibliotek. Når der understøttes af værktøjsværktøjer på unix-varianter, tilføjes en fuld udvidelsesudvidelse (f.eks. '.So.1.34'), og et symbolsk link til bibliotekets fil, der er opkaldt uden det efterfølgende versionsnummer, vil også blive oprettet. ' < br>
http://www.boost.org/doc/libs/1\_45\_0/more/getting\_started/windows.html#library-naming[8]


Filen uden en versionstag er et symbolsk link til bibliotekets fil? Symboliske links i Windows? Jeg forstår ikke.

Bedste reference


Jeg antager, at det er en kopi på windows. Build scriptet forsøger at gøre symbolsk link som det ville på unix, men fordi det ikke understøttes på windows, er det defineret som kopi.


På unix har du normalt libboost\_regex.so som symlink til libboost\_regex.so.1.45.0. Kompilatoren søger efter libboost\_regex.so, læser linket og gemmer det fulde navn i binæret, så den dynamiske linker end belastning libboost\_regex.so.1.45.0 for det pågældende program, selv når libboost\_regex.so.1.46.0, men nye programmer er knyttet mod den seneste version. Build scriptet synes at forsøge at efterligne denne opførsel på Windows så meget som muligt.