c + + - boost link fejl LNK2038: 'boost\_log\_abi' 'v2s\_mt\_nt6' matcher ikke 'v2\_mt\_nt6'

Indlæg af Hanne Mølgaard Plasc

Problem



hvad betyder denne linkfejl? og hvordan man løser det


error LNK2038: “boost\_log\_abi” “v2s\_mt\_nt6” doesn't match  “v2\_mt\_nt6"


Jeg har forsøgt


  ADD\_DEFINITIONS(-DBOOST\_ALL\_DYN\_LINK)
  ADD\_DEFINITIONS(-DBOOST\_LOG\_DYN\_LINK)
  ADD\_DEFINITIONS(-DBOOST\_USE\_WINAPI\_VERSION=0x601)

Bedste reference


Dit Boost.Log-bibliotek synes at have været bygget med forskellige flag, end dit hovedprogram.


Fra config.hpp kan vi se, hvad disse ABI navne betyder: [10]



  • v2s\_mt\_nt6 er statisk forbundet med multithreading-understøttelse på Windows Vista eller nyere (version 6)

  • v2\_mt\_nt6 er dynamisk linket, med multithreading-understøttelse, i Windows Vista eller nyere (version 6)



Makroen BOOST\_LOG\_DLL bestemmer hvilken af ​​de to stier, der skal bruges. Det er defineret, hvis nogen af ​​BOOST\_LOG\_DYN\_LINK eller BOOST\_ALL\_DYN\_LINK er defineret.


Hvis du statisk linker til Boost.Log (via en .lib filer eller lignende), skal du ikke definere en af ​​disse to makroer. 1


Dette betyder, at du enten kan fjerne de ekstra præprocessordefinitioner (fordi du forsøger at linke til et statisk bibliotek) eller bruge en dynamisk biblioteksversion af Boost (se for eksempel her hvordan du konfigurerer det på Windows). ]]





1 Bemærk, at nogle biblioteker ignorerer disse flag. Boost.Log synes at være et af de få, der rent faktisk forårsager problemer, hvis disse makroer er fejlkonfigurerede