Я выделил это для следующего изменения в журналах VERBOSE=1 make
...
- Высшая Сьерра (<= 10.13) и ниже <strong>НЕ использовали команду
-isysroot
.
- Мохаве (> = 10,14) DOES использует команду
-isysroot
.
С gnu.org :
-isysroot <dir>
Эта опция аналогична опции --sysroot
, но применяется только к заголовочным файлам ( за исключением целей Дарвина, где она применяется как к заголовочным файлам, так и к библиотекам ). См. Параметр --sysroot
для получения дополнительной информации.
Таким образом, этот флаг специально перекрывает путь поиска lib
только в Apple. Это приводит к тому, что компиляция никогда не смотрит в стандартные ld
местоположения, что можно увидеть, набрав ld -v dummy
.
Library search paths:
/usr/lib
/usr/local/lib
Почему cmake
делает это? Я думал, что это было для исправления /usr/local/include
проблем , представленных в новом поведении Mojave SDK.
К сожалению, я не могу найти флаг компиляции cmake
для добавления путей поиска библиотеки по умолчанию обратно. На данный момент единственное решение, которое я нашел, это добавить следующее в мой проект:
IF(APPLE)
# Fix linking on 10.14+. See https://stackoverflow.com/questions/54068035
LINK_DIRECTORIES(/usr/local/lib)
ENDIF()
Я не уверен, что такое поведение оправдывает вышестоящий патч cmake
. Если есть лучшее решение, пожалуйста, предоставьте его.