Uploaded image for project: 'Apache Arrow'
  1. Apache Arrow
  2. ARROW-681

[C++] Build Arrow on Windows with dynamically linked boost

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 0.3.0
    • C++
    • None

    Description

      Currently CMake recognizes "imported" 3rd party libs as static libraries. That causes linking issue (.obj data can't be found in stripped .lib for shared .dll, because it's in .dll) if the library should be linked dynamically on Windows.
      To resolve above incorrect behavior, IMPORTED_LOCATION property of imported library replaced with special IMPORTED_IMPLIB. It sets cmake to handle the library as dynamic, not static. https://cmake.org/cmake/help/v3.0/prop_tgt/IMPORTED_IMPLIB.html

      Another linking issue on Windows with dynamically linked boost is caused by boost's autolink feature. Autolinking tells to link against static libs of boost, even if we have turned off usage of static libs in CMAKE. The solution is to turn off boost's autolinking by preprocessor's defines directly from CMAKE script:

      // disable autolinking in boost
      add_definitions(-DBOOST_ALL_NO_LIB)

      // force all boost libraries to dynamic link
      add_definitions(-DBOOST_ALL_DYN_LINK)

      Attachments

        Issue Links

          Activity

            People

              Max Risuhin Max Risuhin
              Max Risuhin Max Risuhin
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: