Catalina 10.15'e yükselttikten sonra Mac'te C programı derlenemiyor


64

Önceki bir soru var Mojave'ye yükselttikten sonra bir Mac'te C programı derlenemiyor ve bunun cevapları neyin yanlış gittiğine dair çeşitliliklerin çoğunu kapsıyor.

Şimdi - Pazartesi 2019-10-07 itibariyle - macOS Catalina 10.15'e yükseltebilirsiniz. Bir kez daha, yükseltme sırasında /usr/include(Mojave 10.14.6'dan) Catalina'ya yükseltilmeden önce XCode 11.0 yüklenmiş olsa bile , dizin güncelleme tarafından uçuruldu. Sonuç olarak, bir /usr/includedizin olmasını beklemek için inşa derleyiciler artık çalışmaz.

Mojave sorunları için önerilen ana adım - şu komutu kullanarak:

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

dizin /Library/Developer/CommandLineTools/Packages/olmadığı için kapıdan çıkmıyor (bu nedenle henüz .pkgaçılacak bir dosya yok).

Dizini oluşturmak ve doldurmak için iyi (resmi) bir yol var /usr/includemı?


/usr/includeApple'ın geliştirici araçlarını Apple'ın mevcut Xcode'u ile kullanmanıza gerek yoktur . Başlıklar ve benzerleri Xcode.app/Contents/Developer/Platforms/SomePlatform/SDKs/SomeSDK. (Farklı dizinlerde başlıklarını tutulması birden çok hedef platformlarını desteklemek için gerekli olduğunu ve bir olması iyi değil /usr/includeana bilgisayar sisteminden bir versiyon diğerlerinden farkı hedeflerken hiçbir derler yanlışlıkla dosyaları kullandığından emin olmak için.) Ne yapar xcode-select -pyolu için gösteri etkin geliştirici dizini?
Eric Postpischil

GCC 9.2.0'ı (Mojave'de) oluşturdum ve /usr/includesistem başlıkları için kullanılabilmesini bekliyor . Bunu hala kullanabilmek isterim, ancak Apple'ın eski Unix sistemleriyle son uyumluluk izlerini attığından şüpheleniyorum (bir dereceye kadar, yazı Mojave'nin çalışmasını sağlamak için gerekli sistemle duvardaydı) '). Bu durumda, muhtemelen bir şekilde sistem başlıklarının mevcut konumunu belirterek GCC'yi yeniden oluşturmak zorundayım - GCC'nin nasıl yapılandırılacağı için manuel dayak.
Jonathan Leffler

1
@JonathanLeffler: Catalina güncellemesinden sonra, R paketlerini yüklerken R yazılım paketi tarafından kullanılan bazı dosyaların (stdlib.h gibi) eksik olduğu sorunuyla da karşılaşıyorum. MacOS_10.14 ile aynı şeyi denedim, ancak bu artık mümkün değil. GCC, c ++ veya / Library / Developer / CommandLineTools / usr / bin'de kurulu olan her şey, ancak R bilmiyor. Ne yapabilirim?
sebastiann

Catalina'yı bir hafta kadar önce yükselttiğimden beri, yeni Mac klavyelerinde şu anda kötü şöhretli 'çift yazma' sorununun kurbanı oldum, zsh'a geçtim, fikrimi değiştirdim ve bash'a dönmeye karar verdim ve bash5.0'a yükseltin, şimdi buradayım çünkü bash5.0'ı derleyemiyorum. Bu sorunun doğru cevabının sadece kayıplarımı kesmek ve Arch'a geçmek değil mi acaba?
DryLabRebel

Problemin bir yolu Xcode derleyicilerini kullanmaktır - eğer yüklenmişlerse, sistem başlıklarını nerede bulabileceklerini bilirler. Kabul edilen cevaptaki CPATH tekniği de iyi çalışıyor gibi görünüyor. Henüz bilmediğim bir `` çift yazarak '' Mac'te acı çekmedim. İPhone'umun her türlü ilginç şeyi yazdığımı kararlaştırdım, ancak şimdiye kadar tahtaya dokun, MacBook Pro'm tamam.
Jonathan Leffler

Yanıtlar:


30

Benim CPATHiçin sorunu çözmek için aşağıdaki yolu ekledim:

export CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include

CPATH eklemeyi denedim; ancak yine de aynı hatayı alıyorum. sadece basit bir cout yapmaya çalışıyorum << "merhaba";
Jon Pellant

1
Bunu denediğimde, şimdi Xcode 11.1 olanı kullanarak Mojave altında inşa edilmiş bir GCC 9.2.0 ile rahat bir testte çalıştı - teşekkür ederim.
Jonathan Leffler

Bu benim için çalıştı GCC 9.2.0_1
Sandeep

5
Xcode.app yerine komut satırı araçlarını kullanıyorsanız,export CPATH=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/
nalzok

Bir gariplik - Ben başladı#include <stdlib.h>ve sonra şikayet hakkında derleme başarısızbazı kod var:In file included from …/usr/include/sys/wait.h:110, —— from …/usr/include/stdlib.h:66, —— from bm.c:27: —— …/usr/include/sys/resource.h:443:9: error: no previous prototype for ‘getiopolicy_np’ [-Werror=missing-prototypes] —— 443 | int getiopolicy_np(int, int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);—— Yine de, daha#include <ctype.h>önceeklediğimde#include <stdlib.h>, Tamam derler. Hala bunun ne anlama geldiğini ve otomatik olarak nasıl ele alınacağını araştırıyor.
Jonathan Leffler

48

Devam etmeden önce xcode komut satırı araçlarını yüklediğinizden emin olun.

xcode-select --install

Aslında yapabilirsin! Aslında tüm C başlıkları burada bu klasörde bulunur:

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/

Sadece tüm üstbilgiler dosyası için bu klasöre symlink oluşturmamız gerekiyor:

/usr/local/include/

Benim için çalıştı! Aşağıdaki komut satırı tüm sorunları halleder:

sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/* /usr/local/include/

Biraz uyarı alacaksınız. Bazı başlıklar zaten var, şöyle:

ln: /usr/local/include//tcl.h: File exists
ln: /usr/local/include//tclDecls.h: File exists
ln: /usr/local/include//tclPlatDecls.h: File exists
ln: /usr/local/include//tclTomMath.h: File exists
ln: /usr/local/include//tclTomMathDecls.h: File exists
ln: /usr/local/include//tk.h: File exists
ln: /usr/local/include//tkDecls.h: File exists
ln: /usr/local/include//tkPlatDecls.h: File exists

yok saymak için tamamen ok. bu kadar.


1
Evet, sanırım bu mümkün - öneri için teşekkür ederim. 'Sistem hijyeni' (örn. Yinelenen üstbilgiler) gereksinimlerimle gerçekten eşleşmiyor ve /usr/local/dizin hiyerarşisi sistem yazılımı yerine yerel yazılım içindir. IMO, başlıklar içinde olmalı /usr/includeve Apple sadece bir acı oluyor.
Jonathan Leffler

1
Bir yol var, işe yarayabilir, deneyebilirsiniz. Kurtarma modunda SIP'yi devre dışı bırakın, ardından /yazma moduna monte edin . Ardından /usr/includeklasörü doldurun . Bunun nedeni, 10.15'te Sistemin salt okunur modda bağlanmasıdır. SIP'i devre dışı bırakmadan, Sistem birimini bağlayamazsınız.
Roy

@KomolNathRoy: ipuçlarınız için teşekkürler. Bu benim için çok işe yaradı. Sonunda istediğim tüm paketleri istatistiksel yazılım R'ye yükleyebilirim, çünkü hiçbir R kurulum için gereken her şeyi bulamaz.
sebastiann

7
Bu çözüm benim için Catalina 10.15'te çalıştı
Matthew Barbara

2
Geçici bir önlem olarak bile SIP'yi devre dışı bırakmak benim için kabul edilemez.
Jonathan Leffler

22

TL; DR

Apple'ın /usr/includedodonun yoluna giren bir şey olarak göründüğü anlaşılıyor - soyu tükenmiş - ya da belki Monty Python'un Papağanı gibi .

Apple tarafından sağlanan GCC'yi (aslında, sürüm bilgilerinin gösterdiği gibi başka bir adla Clang) veya Clang kullanmak sorunları önler. Her ikisi de /usr/bin/gccve /usr/bin/clangsistem kitaplıklarında dört dizin seviyesi aşağıda bulunur:

/Applications/Xcode.app/Contents/Developer/Platforms/…

Kendi GCC'nizi veya başka bir derleyicinizi oluşturursanız, Xcode uygulama dizini altındaki sistem kitaplıklarını bulmak için (muhtemelen) yapılandırmanız gerekecektir.

keşifler

Yükseltmeden hemen sonra XCode 11.0'ı çalıştırdım. Bazı ekstra bileşenler yüklemek istedi, bu yüzden izin verdim. Ancak, bu eski haline getirmedi/usr/include veya altında dizini /Library.

Önceki sorudaki diğer tavsiye parçalarından biri :

xcode-select --install

Bunu yaparken, komut satırı yardımcı programlarını indirdiğini iddia etti /usr/bin/gccve /usr/bin/clangvb. Bu yararlı bir adım (gerçi onlar daha önce mevcut olup olmadığını kesinlikle kontrol etmedi rağmen).

$ /usr/bin/gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 11.0.0 (clang-1100.0.33.8)
Target: x86_64-apple-darwin19.0.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
$

Kullanarak /usr/bin/gcc, programları derlemek artık mümkün:

$ make CC=/usr/bin/gcc al
co  RCS/al.c,v al.c
RCS/al.c,v  -->  al.c
revision 1.7
done
/usr/bin/gcc -I/Users/jleffler/inc -g -O3 -std=c11 -pedantic -Wall -Wextra -Werror -Wshadow -Wmissing-prototypes -Wpointer-arith  -Wold-style-definition -Wcast-qual -Wstrict-prototypes -DHAVE_MEMMEM -DHAVE_STRNDUP -DHAVE_STRNLEN  -DHAVE_GETDELIM   -o al al.c -L/Users/jleffler/lib/64  -ljl
$

Ancak, /usr/includehala eksik. Şu anda bir dizin var /Library:

$ ls /Library/Developer
CommandLineTools  PrivateFrameworks
$ ls /Library/Developer/CommandLineTools
Library SDKs    usr
$ ls /Library/Developer/CommandLineTools/SDKs
MacOSX.sdk      MacOSX10.14.sdk MacOSX10.15.sdk
$ ls /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/
Entitlements.plist SDKSettings.json   System
Library            SDKSettings.plist  usr
$

Ne dizin Systemne de Librarydizin çok umut verici bir şey içermiyor.

Her şey başarısız olduğunda, kılavuzu okuyun

Sonraki adım - sürüm notlarını bulun ve okuyun:

Orada bununla ilgili hiçbir bilgi yok. Yani, Apple'ın artık desteklememesi olasılığı (AFAICS, sadece bir veya iki saat sonra) /usr/include- hala tam yüklü olmasına rağmen /usr/lib( yine de yok /lib).

-vEklenen GCC seçeneğiyle başka bir derlemeyi kontrol etme zamanı (kullandığım makefile'da, ayar UFLAGSseçeneği C derleyici komut satırına ekler):

$ make UFLAGS=-v CC=/usr/bin/gcc ww
co  RCS/ww.c,v ww.c
RCS/ww.c,v  -->  ww.c
revision 4.9
done
/usr/bin/gcc -I/Users/jleffler/inc -g -O3 -std=c11 -pedantic -Wall -Wextra -Werror -Wshadow -Wmissing-prototypes -Wpointer-arith  -Wold-style-definition -Wcast-qual -Wstrict-prototypes -DHAVE_MEMMEM -DHAVE_STRNDUP -DHAVE_STRNLEN  -DHAVE_GETDELIM -v  -o ww ww.c -L/Users/jleffler/lib/64  -ljl
Apple clang version 11.0.0 (clang-1100.0.33.8)
Target: x86_64-apple-darwin19.0.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.15.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -disable-free -disable-llvm-verifier -discard-value-names -main-file-name ww.c -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -fno-strict-return -masm-verbose -munwind-tables -target-sdk-version=10.15 -target-cpu penryn -dwarf-column-info -debug-info-kind=standalone -dwarf-version=4 -debugger-tuning=lldb -ggnu-pubnames -target-linker-version 512.4 -v -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -I /Users/jleffler/inc -D HAVE_MEMMEM -D HAVE_STRNDUP -D HAVE_STRNLEN -D HAVE_GETDELIM -I/usr/local/include -O3 -Wall -Wextra -Werror -Wshadow -Wmissing-prototypes -Wpointer-arith -Wold-style-definition -Wcast-qual -Wstrict-prototypes -Wno-framework-include-private-from-public -Wno-atimport-in-framework-header -Wno-extra-semi-stmt -Wno-quoted-include-in-framework-header -pedantic -std=c11 -fdebug-compilation-dir /Users/jleffler/src/cmd -ferror-limit 19 -fmessage-length 110 -stack-protector 1 -fstack-check -mdarwin-stkchk-strong-link -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fobjc-runtime=macosx-10.15.0 -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -vectorize-loops -vectorize-slp -o /var/folders/77/zx9nk6dn7_dg4xd4stvt42v00000gn/T/ww-4cb85b.o -x c ww.c
clang -cc1 version 11.0.0 (clang-1100.0.33.8) default target x86_64-apple-darwin19.0.0
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/local/include"
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
 /Users/jleffler/inc
 /usr/local/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)
End of search list.
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -arch x86_64 -macosx_version_min 10.15.0 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -o ww -L/Users/jleffler/lib/64 /var/folders/77/zx9nk6dn7_dg4xd4stvt42v00000gn/T/ww-4cb85b.o -ljl -L/usr/local/lib -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.osx.a
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/dsymutil" -o ww.dSYM ww
$

Bu veri blizzardındaki anahtar bilgiler:

-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk

Bu derleme için etkili bir şekilde 'kök' dizini, bu nedenle usrve altında alt dizinler olmalıdır usr/include:

$ ls /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
Entitlements.plist SDKSettings.json   System
Library            SDKSettings.plist  usr
$ ls /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr
bin     include lib     libexec share
$ ls /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
AppleTextureEncoder.h  dns_util.h             memory.h               simd
AssertMacros.h         dtrace.h               menu.h                 slapi-plugin.h
Availability.h         editline               miscfs                 spawn.h
AvailabilityInternal.h err.h                  module.modulemap       sqlite3.h
AvailabilityMacros.h   errno.h                monetary.h             sqlite3ext.h
AvailabilityVersions.h eti.h                  monitor.h              stab.h
lots more lines
dirent.h               mach-o                 security               xcselect.h
disktab.h              mach_debug             semaphore.h            xlocale
dispatch               machine                servers                xlocale.h
dlfcn.h                malloc                 setjmp.h               xpc
dns.h                  math.h                 sgtty.h                zconf.h
dns_sd.h               membership.h           signal.h               zlib.h
$

Bu, mil uzunluğunda ve tamamen unutulmaz dizin adının standart C ve POSIX başlıklarının yanı sıra Apple'a özgü ekstraları içerdiğini gösterir.

Önceki /usr/local/dizin sağlam görünüyor; usr/local/includealtında bulunmadığı uyarısı -isysrootdirzararsızdır (ve -vseçenek olmadan görünmez ).


Üzgünüz önerinizi takip edemedim. Catalina güncellemesinde de aynı hatayı alıyorum. Vscode ile C ++ uygulamaları inşa edemedi ve wchar.hhata bulunamadı. Bu klasörü dahil etmeye çalıştım -I / Applications / Xcode.app / İçindekiler / Geliştirici / Platformlar / MacOSX.platform / Developer / SDKs / MacOSX.sdk / usr / include ve iam için eksik semboller gibi diğer hataları alıyorum "hatası: üye yok global ad alanında 'isless' seçildi "
user3279954

--verboseGörevler dosyasında etkinleştirildi ve vs kodunun /usr/include/c++/v1/artık catalina'da bulunmayan klasöre baktığını fark ettim . Yukarıdaki sdk include ile birlikte aşağıdaki klasörü de ekledi ve şimdi çalışıyor. "-I / Kütüphane / Geliştirici / CommandLineTools / usr / include / c ++ / v1 /",
user3279954

@trojanfoe - SCCS'yi tercih ediyorum ama 1999'da SCCS'nin Y2K sonrası sağlıklı bir şekilde çalışıp çalışmayacağı belli değildi (ve bildiğim SCCS'nin iyi bir açık kaynak uygulaması yoktu), bu yüzden isteksizce RCS'ye geçtim.
Jonathan Leffler

Vay canına: D Her neyse, /usr/includekaybolmanın sorunu ne ? Her zaman dolaylı olarak derleyici içerme yolunun bir parçasıydı, böylece kullanıcı asla bu konuda bilmeye ihtiyaç duymadı (bir şeyin nerede bildirildiğini bulmaya çalıştığınız zaman dışında). Clang, SDK yolu ile aynı şeyi yapar, Xcode.appböylece net etki aynıdır.
trojanfoe

1
@trojanfoe: /usr/includeAWOL ile ilgili bir sorun (birincil sorunum) kaynağından kendi GCC'nizi oluşturduysanız, muhtemelen sistem başlıklarını bulmak için derlenmiş /usr/includeve bu nedenle derlemeler başarısız olmasıdır. Clang'ın yanı sıra en son GCC'yi kullanmak istiyorum. Apple'ın Clang'ını kullanmaktan mutluyum, ancak Apple'ın Clang'ı GCC olarak maskeli kullanmaktan mutlu değilim - GCC ile aynı değil. Sistem başlıkları yeniden yerleştirilmiş olarak GCC'yi oluşturmak için henüz bir tarif geliştirmedim. (Sanırım --with-native-system-header-dir="${XCODE_HDR}"cevabın bir parçası; ancak, bütün cevap değil.)
Jonathan Leffler

7

Aşağıdaki örtük Makedeğişkenleri, Xcode Komut Satırı Araçları (Xcode CLI) için şimdi başlıkların bulunduğu yeri gösterecek şekilde ayarlayın :

export CFLAGS+=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CCFLAGS+=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CXXFLAGS+=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CPPFLAGS+=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk

Bu -isysrootseçenek , kök dosyaların konumunu sistem kök dizininden uzağa günceller /.

Bu, ortak /usr/*dosyaların yeni yerlerinde bulunmasını sağlar.

Yani, adresindeki dosyalar /Library/Developer/CommandLineTools/SDKs/MacOSX.sdkşimdi bulundu. Bu dosyalar:

Entitlements.plist 
Library
SDKSettings.json
SDKSettings.plist
System
usr

Benim makefiles (ve gördüğüm diğer birçok makefiles), CFLAGStek bir seçenekten çok daha karmaşıktır - -isysrootseçeneğin diğer ayarlara ek olarak (diğer birçok ayar) olması gerekir. Burada bir fikrin çekirdeği olabilir ( -isysrootseçeneği ve altındaki konumu geçirin /Library/Developer/…), ancak prime time için hazır olmadan önce biraz cilalamaya ihtiyaç duyacaktır.
Jonathan Leffler

@JonathanLeffler Kullanma export CFLAGS+=-isysroot ... Bunun yerine kullanılması bu kullanım durumu için çalışacaktır. Bu benim için işe yarayan tek çözüm (Catalina (10.15) ile Catalina (10.15) SDK'sında. .pkgXCode ve komut satırı araçlarım güncel olsa bile herkesin konuştuğu dosyaya sahip değilim ).
Norswap

@Norswap - kullanımında arasında büyük bir fark var CFLAGS=…veCFLAGS+=… .
Jonathan Leffler

@JonathanLeffler kabul etti. Kullanılacak cevabı güncelledim +=. Teşekkürler @Norswap.
ceketsiz

1
Alternatif olarak, bu ayarı anladım SDKROOT aynı sdk değerine ( /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk) benim için de işe yarayacağını anladım!
Norswap

4

Ben OSX R için C ++ derleyicisi ile bir acemi ve C + + OS güncellendikten sonra ( bu olmasına rağmen math.h eksik) başlık bulamadı aynı sorunu var . Https://thecoatlessprofessor.com/programming/cpp/r-compiler-tools-for-rcpp-on-macos/ adresindeki talimatları izledim, ancak hiçbir şey değişmedi.

Son olarak, Xcode CLI'yi yeniden yükledikten sonra benim için çalıştı

xcode-select --install

ve @Coatless'ın önerdiği gibi bayrakları Var olarak değiştirin:

export CFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CCFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CXXFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
export CPPFLAGS=-isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk

1

Benim durumumda var gibi görünüyordu llvmvegcc ayrıca homebrew kullanarak yüklü. Bunları kaldırdığımda ve böylece macOS clang'a tamamen güvendiğimde, üstbilgileri ve derlemeyi tekrar çalıştı.


0

apue.h bağımlılığı /usr/local/includetakip ettikten sonra hala eksiktiBu soruda Komol Nath Roy cevabını .

Bağımlılığı git'ten manuel olarak indirdim ve içine yerleştirdim /usr/local/include


Başlık apue.h, W Richard Stevens, Stephen A Rago Unix Ortamında İleri Programlama, 3. Baskı 2013'ten . AFAIK, Apple tarafından hiçbir zaman sistem başlığı olarak . ( /usr/includeStills, Mojave'yi çalıştıran makinemde değil .) Bir kez kurulduysa /usr/include, muhtemelen Apple tarafından sağlanmak yerine manuel olarak yaratıldı. Bu nedenle, daha önce kurulmuş olmalıdır /usr/local/include.
Jonathan Leffler

Saf sorumu özür dilerim ama bu hafta ellerimi C ++ ile aldım. Bağımlılıklar / başlıklar c ++ ile manuel olarak yönetiliyor mu? evet ise, söz konusu tüm bağımlıları / başlıkları koymalı /usr/includemıyım?
Matthew Barbara

1
S1: Aşağı yukarı. Biraz ne demek istediğinize bağlı, ancak başlıklar çalıştığınız makinelerde standart değilse, C veya C ++ için bağımlılıklar ve başlıklar hakkında endişelenmeniz gerekir. Sonra soru geliyor - standart nedir? Ve verilebilecek en iyi cevap hakkında "buna bağlıdır" ve "platform" (O / S, derleyici) dahil olmak üzere birçok faktöre bağlıdır. Q2 "Hayır, genellikle hiçbir şey koymamalısınız/usr/include " - /usr/local/includebunun yerine kullanın. Genellikle, yalnız bırakmak /usr/includeve /usr/libaltına malzeme eklemek en /usr/localgüvenlidir.
Jonathan Leffler

0

Çözüm düşündüğümden daha basitti. Clang / llvm'yi yükleyin.

brew install llvm

O zaman kendimiz semboller yaratmalıyız.

for f in /usr/local/Cellar/llvm/9.0.0_1/bin/clang*; do ln -s ${f} /usr/local/bin/"${f##*/}"; done

Ve

ln -s /usr/local/Cellar/llvm/9.0.0_1/include/c++ /usr/local/include/c++

Llvm sürümünüze bağlı olarak yukarıdaki komutları değiştirin.

Şimdi, herhangi bir özel bayrak geçirmeden C ++ programlarını derleyebilirsiniz.

clang++ hello.cpp


0

Benim için aşağıdaki gibi iyi çalışır:

1. xcode-select --install

2. sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/* /usr/local/include/

3. export SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.