Linking not working in homebrew's cmake since Mojave

后端 未结 2 1339
故里飘歌
故里飘歌 2020-12-06 05:34

I\'ve reproduced this symptom on two computers now, cmake seems to no longer look in /usr/local/lib (or more properly, $(brew --prefix)/lib

2条回答
  •  粉色の甜心
    2020-12-06 05:55

    I've isolated this to the following change in the VERBOSE=1 make logs...

    • High Sierra (<=10.13) and below did NOT use the -isysroot command.
    • Mojave (>=10.14) DOES use the -isysroot command.

    From gnu.org:

    -isysroot

    This option is like the --sysroot option, but applies only to header files (except for Darwin targets, where it applies to both header files and libraries). See the --sysroot option for more information.

    So this flag specifically clobbers the lib search path only on Apple. This results in the compilation never looking in the standard ld locations, which can be seen by typing ld -v dummy.

    Library search paths:
        /usr/lib
        /usr/local/lib
    

    Why does cmake do this? My thought is it was to fix the /usr/local/include issues introduced with the new Mojave SDK behavior.

    Unfortunately, I can't find a cmake compile flag to add the default library search paths back in. For now the only solution I've found is to add the following to my project:

    IF(APPLE)
        # Fix linking on 10.14+. See https://stackoverflow.com/questions/54068035
        LINK_DIRECTORIES(/usr/local/lib)
    ENDIF()
    

    I'm not sure if this is a behavior that warrants an upstream cmake patch. If there is a better solution, please provide it.

提交回复
热议问题