#c #macos #clang
Вопрос:
Я довольно новичок в macOS, поэтому буду очень признателен за любую помощь!
Я пытаюсь скомпилировать программу на своем Mac (чип M1 с архитектурой arm64, Mac OS Monterey), для которой требуется архитектура x86_64 и gfortran. Я установил версию x86_64 brew
, clang
, gcc
, gsl
и pkg-config
. Однако я получаю ошибку, при которой компилятор не может найти файл заголовка:
Running cmake. CMake Deprecation Warning at CMakeLists.txt:2 (cmake_policy): The OLD behavior for policy CMP0002 will be removed from a future version of CMake. The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that a policy should be set to OLD only under specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD. -- The C compiler identification is AppleClang 13.0.0.13000029 -- The CXX compiler identification is AppleClang 13.0.0.13000029 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /Library/Developer/CommandLineTools/usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /Library/Developer/CommandLineTools/usr/bin/c - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- The Fortran compiler identification is GNU 11.2.0 -- Checking whether Fortran compiler has -isysroot -- Checking whether Fortran compiler has -isysroot - yes -- Checking whether Fortran compiler supports OSX deployment target flag -- Checking whether Fortran compiler supports OSX deployment target flag - yes -- Detecting Fortran compiler ABI info -- Detecting Fortran compiler ABI info - done -- Check for working Fortran compiler: /usr/local/bin/gfortran - skipped -- Checking whether /usr/local/bin/gfortran supports Fortran 90 -- Checking whether /usr/local/bin/gfortran supports Fortran 90 - yes Defaulting to gfortran -- Found PythonInterp: /Users/lg268561/opt/anaconda3/envs/kcap_env/bin/python (found version "3.9.7") -- Found PkgConfig: /usr/local/bin/pkg-config (found version "0.29.2") -- Found GSL: /usr/local/Cellar/gsl/2.7/include (found suitable version "2.7", minimum required is "2.1") -- Looking for gfortran related libraries... -- Extracting library and header information by calling 'gfortran -v'... -- 'gfortran -v' returned: -- Using built-in specs. COLLECT_GCC=/usr/local/bin/gfortran COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc/11.2.0_1/libexec/gcc/x86_64-apple-darwin21/11.2.0/lto-wrapper Target: x86_64-apple-darwin21 Configured with: ../configure --prefix=/usr/local/Cellar/gcc/11.2.0_1 --libdir=/usr/local/Cellar/gcc/11.2.0_1/lib/gcc/11 --disable-nls --enable-checking=release --enable-languages=c,c ,objc,obj-c ,fortran,d --program-suffix=-11 --with-gmp=/usr/local/opt/gmp --with-mpfr=/usr/local/opt/mpfr --with-mpc=/usr/local/opt/libmpc --with-isl=/usr/local/opt/isl --with-zstd=/usr/local/opt/zstd --with-pkgversion='Homebrew GCC 11.2.0_1' --with-bugurl=https://github.com/Homebrew/homebrew-core/issues --enable-libphobos --build=x86_64-apple-darwin21 --with-system-zlib --disable-multilib --without-build-config --with-native-system-header-dir=/usr/include --with-sysroot=/Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 11.2.0 (Homebrew GCC 11.2.0_1) -- Detected gfortran version 11.2.0 -- Architecture string: Target: x86_64-apple-darwin21 -- Detected gfortran architecture: x86_64-apple-darwin21 -- Detected gfortran prefix: /usr/local/Cellar/gcc/11.2.0_1 -- Detected default gfortran exec-prefix -- Detected gfortran exec-prefix: /usr/local/Cellar/gcc/11.2.0_1 -- Found --libdir flag -- yes -- gfortran libraries path: /usr/local/Cellar/gcc/11.2.0_1/lib/gcc/11 -- gfortran include path dir: /usr/local/Cellar/gcc/11.2.0_1/lib/gcc/11/gcc/x86_64-apple-darwin21/11.2.0/include -- Found GFortranLibs: /usr/local/Cellar/gcc/11.2.0_1/lib/gcc/11/libgfortran.dylib (found version "11.2.0") -- Looking for gfortran libraries -- found -- gfortran version: 11.2.0 CMake Deprecation Warning at cosebis/CMakeLists.txt:5 (cmake_policy): The OLD behavior for policy CMP0002 will be removed from a future version of CMake. The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that a policy should be set to OLD only under specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD. GSL_INC:/usr/local/Cellar/gsl/2.7/include GSL_LIB:/usr/local/Cellar/gsl/2.7/lib -- Configuring done -- Generating done -- Build files have been written to: /Users/lg268561/Downloads/kcap/build Running make. [ 0%] Built target GSL [ 5%] Running make for cosebis make[3]: Entering directory `/Users/lg268561/Downloads/kcap/cosebis' make[4]: Entering directory `/Users/lg268561/Downloads/kcap/cosebis/modules' clang: warning: -lgsl: 'linker' input unused [-Wunused-command-line-argument] clang: warning: -lgslcblas: 'linker' input unused [-Wunused-command-line-argument] clang: warning: argument unused during compilation: '-L/usr/local/Cellar/gsl/2.7/lib' [-Wunused-command-line-argument] matrix.cc:1:10: fatal error: 'unistd.h' file not found #include "unistd.h" ^~~~~~~~~~ 1 error generated.
Попытки найти решение из чтения в Интернете:
-Когда я проверяю каталоги gfortran include path, файл заголовка находится там.
-Удалите все в /Library/Developer/CommandTools/
каталоге и повторите xcode-select --install
, но ошибка сохраняется.
-Я изменил псевдоним своего gcc и перешел на версии x86_64, расположенные в /usr/local/
каталоге. gcc -v
дает:
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c /4.2.1 Apple clang version 13.0.0 (clang-1300.0.29.3) Target: x86_64-apple-darwin21.1.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin
и clang -v
дает:
Apple clang version 13.0.0 (clang-1300.0.29.3) Target: x86_64-apple-darwin21.1.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin
Я создал символическую ссылку на каждую версию MacOSX.sdk в своей SDKs/
папке. Проблема все еще сохраняется.
Редактировать
Я проверил журнал ошибок CMake:
Compiling the C compiler identification source file "CMakeCCompilerId.c" failed. Compiler: /Library/Developer/CommandLineTools/usr/bin/cc Build flags: Id flags: The output was: 1 ld: library not found for -lSystem clang: error: linker command failed with exit code 1 (use -v to see invocation) Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" failed. Compiler: /Library/Developer/CommandLineTools/usr/bin/c Build flags: Id flags: The output was: 1 ld: library not found for -lc clang: error: linker command failed with exit code 1 (use -v to see invocation)
может ли это быть проблемой со связанными библиотеками вместо этого?
Комментарии:
1. Это просто unistd.h, который отсутствует, или есть другие, подобные stdio. h также непригоден для использования?
2. Другие файлы заголовков также не могут быть найдены…
3. Вы можете попробовать запустить «sudo opensnoop» в окне терминала во время запуска компилятора; в нем будут перечислены файлы, которые компилятор пытается открыть, что, по крайней мере, может дать вам представление о том, где он ищет файлы заголовков.
4. @JeremyFriesner, я попробовал это, просто дает много » недопустимого доступа пользователя в действии #11 …»