Linking Not Working in Homebrew's Cmake Since Mojave

Linking not working in homebrew's cmake since Mojave

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 <dir>
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.

Can't link libraries for C++11 on MacOS Mojave

Specify that you want from boost. Here, you need "system":

find_package(Boost REQUIRED system)

Boost sets up variables to help after:

target_link_libraries(FinalProject ssl cpprestsdk::cpprest ${Boost_SYSTEM_LIBRARY})

Installed, just not linked

Looks like a permission issue. I would try doing this

chmod 755 /usr/local/lib/pkgconfig

This should make that available, then try

brew link valgrind

If that doesn't work I would try doing a check on it

brew doctor

How to fix homebrew permissions?

I was able to solve the problem by using chown on the folder:

sudo chown -R "$USER":admin /usr/local

Also you'll (most probably) have to do the same on /Library/Caches/Homebrew:

sudo chown -R "$USER":admin /Library/Caches/Homebrew

Apparently I had used sudo before in a way that altered my folder permission on /usr/local,
from here on forward all installations with brew have proven to be successful.

This answer comes courtesy of gitHub's homebrew issue tracker



Related Topics



Leave a reply



Submit