<html><head></head><body><div class="yahoo-style-wrap" style="font-family:Helvetica Neue, Helvetica, Arial, sans-serif;font-size:13px;"><div dir="ltr" data-setdir="false">I am getting the following link errors when building my application in MSVC++:</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false"><div><div>1>gdal.lib(gdalallregister.cpp.obj) : error LNK2019: unresolved external symbol _GDALRegister_ECW referenced in function _GDALAllRegister@0</div><div>1>gdal.lib(gdalallregister.cpp.obj) : error LNK2019: unresolved external symbol _GDALRegister_JP2ECW referenced in function _GDALAllRegister@0</div><div>1>gdal.lib(gdalallregister.cpp.obj) : error LNK2019: unresolved external symbol _GDALRegister_MrSID referenced in function _GDALAllRegister@0</div><div><br></div></div>I am linking statically to GDAL built as a static library with vcpkg (which builds without error). I am using a custom x86-windows.cmake file with vcpkg, customized mainly to include MrSID and ECW functionality in GDAL. I have pasted the cmake text at the bottom of this email.</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">From what I can see in the GDAL code, it's behaving as if <div><div dir="ltr" data-setdir="false">gdal/frmts/mrsid/mrsiddataset.cpp (which contains the function <span><span style="color: rgb(0, 0, 0); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;">GDALRegister_MrSID)</span></span> wasn't compiled into the library, yet the following code in <span>frmts/gdalallregister.cpp was compiled.</span></div></div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false"><div><div>#ifdef FRMT_mrsid</div><div> GDALRegister_MrSID();</div><div>#endif</div><div><br></div></div><div dir="ltr" data-setdir="false">Can you help me understand how this could happen? What actually controls whether <span>gdal/frmts/mrsid/mrsiddataset.cpp gets compiled into the library?</span></div><br></div></div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">---</div><div dir="ltr" data-setdir="false"><span><span style="color: rgb(0, 0, 0); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;">x86-windows.cmake:</span></span><br></div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false"><div><div style="color: rgb(204, 204, 204); background-color: rgb(31, 31, 31); font-family: Consolas, "Courier New", monospace; font-size: 14px; line-height: 19px;"><div><span style="color: #569cd6;">set</span>(VCPKG_TARGET_ARCHITECTURE x86)</div><div><span style="color: #569cd6;">set</span>(VCPKG_CRT_LINKAGE static)</div><div><span style="color: #569cd6;">set</span>(VCPKG_LIBRARY_LINKAGE static)</div><div><span style="color: #569cd6;">set</span>(VCPKG_BUILD_TYPE release)</div><div><span style="color: #569cd6;">set</span>(ENV{CMAKE_WINDOWS_KITS_10_DIR} <span style="color: #ce9178;">"C:</span><span style="color: #d7ba7d;">\\</span><span style="color: #ce9178;">Program Files (x86)</span><span style="color: #d7ba7d;">\\</span><span style="color: #ce9178;">Windows Kits</span><span style="color: #d7ba7d;">\\</span><span style="color: #ce9178;">10"</span>)</div><div><span style="color: #569cd6;">set</span>(VCPKG_CMAKE_CONFIGURE_OPTIONS <span style="color: #ce9178;">"-DCMAKE_WINDOWS_KITS_10_DIR=C:</span><span style="color: #d7ba7d;">\\</span><span style="color: #ce9178;">Program Files (x86)</span><span style="color: #d7ba7d;">\\</span><span style="color: #ce9178;">Windows Kits</span><span style="color: #d7ba7d;">\\</span><span style="color: #ce9178;">10"</span>)</div><div><span style="color: #569cd6;">set</span>(VCPKG_ENV_PASSTHROUGH CMAKE_WINDOWS_KITS_10_DIR)</div><br><div><span style="color: #6a9955;"># CMAKE_CURRENT_LIST_DIR is the triplets directory</span></div><div><span style="color: #6a9955;"># such as C:/Users/michael.katz/Documents/vcpkg/triplets</span></div><div><span style="color: #569cd6;">message</span>( STATUS <span style="color: #ce9178;">"</span><span style="color: #d7ba7d;">\n\n</span><span style="color: #ce9178;">-----------------------CMAKE_CURRENT_LIST_DIR = ${CMAKE_CURRENT_LIST_DIR}</span><span style="color: #d7ba7d;">\n\n</span><span style="color: #ce9178;">"</span> )</div><br><div><span style="color: #569cd6;">if</span> (PORT <span style="color: #569cd6;">MATCHES</span> <span style="color: #ce9178;">"gdal"</span>)</div><div><span style="color: #569cd6;"> string</span>(</div><div> CONCAT x</div><div> <span style="color: #ce9178;">" </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">-DMRSID_INCLUDE_DIR=${CMAKE_CURRENT_LIST_DIR}/../sdk/MrSID_DSDK-9.5.5.5244-win32-vc17/Raster_DSDK/include</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">"</span></div><div> <span style="color: #ce9178;">" </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">-DMRSID_LIBRARY=${CMAKE_CURRENT_LIST_DIR}/../sdk/MrSID_DSDK-9.5.5.5244-win32-vc17/Raster_DSDK/lib/lti_dsdk.lib</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">"</span></div><div> <span style="color: #ce9178;">" </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">-DGDAL_USE_MRSID=ON</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">"</span></div><div> <span style="color: #ce9178;">" </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">-DFRMT_mrsid=ON</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">"</span></div><div> <span style="color: #ce9178;">" </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">-DECW_INCLUDE_DIR=${CMAKE_CURRENT_LIST_DIR}/../sdk/ecw/Hexagon/ERDAS_ECW_JPEG_2000_SDK_5.5.0/Desktop_Read-Only/include</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">"</span></div><div> <span style="color: #ce9178;">" </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">-DECW_LIBRARY=${CMAKE_CURRENT_LIST_DIR}/../sdk/ecw/Hexagon/ERDAS_ECW_JPEG_2000_SDK_5.5.0/Desktop_Read-Only/lib/vc141/Win32/NCSEcw.lib</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">"</span></div><div> <span style="color: #ce9178;">" </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">-DGDAL_USE_ECW=ON</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">"</span></div><div> <span style="color: #ce9178;">" </span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">-DFRMT_ecw=ON</span><span style="color: #d7ba7d;">\"</span><span style="color: #ce9178;">"</span></div><div> )</div><div><span style="color: #569cd6;"> set</span>(VCPKG_CMAKE_CONFIGURE_OPTIONS <span style="color: #ce9178;">"${VCPKG_CMAKE_CONFIGURE_OPTIONS} ${x}"</span> )</div><div><span style="color: #569cd6;"> set</span>(VCPKG_CXX_FLAGS <span style="color: #ce9178;">"${VCPKG_CXX_FLAGS} -DFRMT_mrsid=ON"</span>)</div><div><span style="color: #569cd6;"> set</span>(VCPKG_C_FLAGS <span style="color: #ce9178;">"${VCPKG_C_FLAGS} -DFRMT_mrsid=ON"</span>)</div><div><span style="color: #569cd6;"> set</span>(VCPKG_CXX_FLAGS <span style="color: #ce9178;">"${VCPKG_CXX_FLAGS} -DFRMT_ecw=ON"</span>)</div><div><span style="color: #569cd6;"> set</span>(VCPKG_C_FLAGS <span style="color: #ce9178;">"${VCPKG_C_FLAGS} -DFRMT_ecw=ON"</span>)</div><div><span style="color: #569cd6;">endif</span>()</div><br><div><span style="color: #569cd6;">message</span>( STATUS <span style="color: #ce9178;">"</span><span style="color: #d7ba7d;">\n\n</span><span style="color: #ce9178;">-----------------------VCPKG_CMAKE_CONFIGURE_OPTIONS = ${VCPKG_CMAKE_CONFIGURE_OPTIONS}</span><span style="color: #d7ba7d;">\n\n</span><span style="color: #ce9178;">"</span> )</div><br><div><span style="color: #569cd6;">message</span>( STATUS <span style="color: #ce9178;">"</span><span style="color: #d7ba7d;">\n\n</span><span style="color: #ce9178;">-----------------------FEATURES = ${FEATURES}</span><span style="color: #d7ba7d;">\n\n</span><span style="color: #ce9178;">"</span> )</div><br></div></div><br></div></div></body></html>