Привет! Меня зовут Ксавье Жувено, и в этом посте мы рассмотрим, как правильно исправить ошибку с неопределенным символом «_futimens» в LLVM на OSX.

Самореклама: другие статьи вы можете найти на моем сайте

Проблемный

При интеграции последней версии LLVM с вашим проектом OSX вы могли столкнуться с такой ошибкой, как:

Undefined symbols for architecture x86_64:
  "_futimens", referenced from:
    llvm::sys::fs::setLastModificationAndAccessTime(int, std::__1::chrono::time_point<std::__1::chrono::system_clock, std::__1::chrono::duration<long long, std::__1::ratio > >) in libLLVMSupport.a(Path.cpp.o)

Это проблема, с которой вы наверняка столкнетесь, пытаясь использовать в своей программе llvm, импортированный через brew или macport или даже из GitHub проекта LLVM.

Но не беспокойтесь, мы посмотрим, как решить эту проблему 😉

Решения

На самом деле есть два решения, которые вы можете реализовать, чтобы решить эту проблему.

Поддержка OSX и версии LLVM

Последняя версия LLVM не поддерживает «старую» версию OSX, но ее можно интегрировать в современную версию OSX, официально поддерживаемую OSX (10.13 или новее).

Таким образом, решение проблемы состоит в том, чтобы обновить версию LLVM и обновить OSX SDK, который вы используете в своем проекте, чтобы ваш проект работал. Вы должны хотя бы обновить свой OSX SDK до версии 10.13, так как в этой версии OSX «ошибка футименса» больше не присутствует.

Итак, если вам больше не нужна поддержка OSX 10.12 или более ранней версии, вам следует реализовать это решение, поскольку оно будет самым простым в реализации и обслуживании.

Для более старого OSX SDK

Если вам нужно поддерживать версию OSX старше 10.13, то это решение, которое вы должны реализовать, поскольку, насколько мне известно, другого нет. И это решение состоит в том, чтобы собрать свой LLVM самостоятельно.

Это решение может показаться сложной и непосильной задачей, но на самом деле вы можете сделать это довольно просто. Действительно, проект LLVM можно очень легко собрать с помощью команды cmake с помощью следующей команды

cd llvm-project/llvm/build
cmake .. -G "Unix Makefiles"
  -DCMAKE_INSTALL_PREFIX=../../../install
  -DCMAKE_BUILD_TYPE=Release
  -DLLVM_ENABLE_ASSERTIONS=OFF
  -DCMAKE_OSX_DEPLOYMENT_TARGET=10.12
cmake --build . --config Release --target install

Даже в последнем выпуске LLVM вы можете поддерживать OSX 10.12 или старше благодаря переменной CMAKE_OSX_DEPLOYMENT_TARGET. Единственное неудобство этого решения в том, что генерация всех библиотек LLVM занимает оооооочень много времени 😜

Но как только это будет сделано, вы сможете без проблем использовать LLVM в своем проекте 😉

Спасибо всем за прочтение этой статьи, и до моей следующей статьи, хорошего дня 😉

Интересные ссылки

Первоначально опубликовано на http://10xlearner.com 18 ноября 2020 г.