macOS mojave로gnug++로 컴파일할 수 없습니다

9748 단어 C++macOSGNUMojavetech

결론


다음 명령을 실행하여 /usr/include에서 머리글 파일을 확장합니다.
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

컨디션

  • macOS Mojave 10.14.6
  • Xcode 11.3.1
  • gnue gcc 10.2.0_3
  • 배경.


    맥OS에서 사용하려면simstirng 애플 클래핑으로 컴파일하면 UTF-16/32 지원이 무효가 됩니다.컴파일 대신gnug++를 사용하려고 합니다.

    문제.


    문제를 이해하기 편리하도록 c++ 소스 코드를 준비하십시오. 눈썹 파일만 포함하면 됩니다.
    string.cpp
    #include <string>
    int main () {}
    
    MacOS 기본 c++ 컴파일러가 컴파일될 수 있는지 확인합니다.
    c++ string.cpp
    
    이 컴파일러의 실질은 애플clang이다.
    ~ c++ --version
    Apple clang version 11.0.0 (clang-1100.0.33.17)
    Target: x86_64-apple-darwin18.7.0
    Thread model: posix
    InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
    
    홈brew를 사용하여gnug++를 설치합니다.
    brew install gcc
    
    /usr/local/Cellar/gcc/10.2.0_3에 설치됩니다.
    디렉토리는 버전에 따라 다를 수 있습니다.
    g++,string을 사용합니다.cpp를 컴파일할 때 다음과 같은 오류가 발생합니다.
    ~ /usr/local/Cellar/gcc/10.2.0_3/bin/c++-10 string.cpp
    In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/wchar.h:90,
                     from /usr/local/Cellar/gcc/10.2.0_3/include/c++/10.2.0/cwchar:44,
                     from /usr/local/Cellar/gcc/10.2.0_3/include/c++/10.2.0/bits/postypes.h:40,
                     from /usr/local/Cellar/gcc/10.2.0_3/include/c++/10.2.0/bits/char_traits.h:40,
                     from /usr/local/Cellar/gcc/10.2.0_3/include/c++/10.2.0/string:40,
                     from string.cpp:1:
    /usr/local/Cellar/gcc/10.2.0_3/lib/gcc/10/gcc/x86_64-apple-darwin18/10.2.0/include-fixed/stdio.h:219:10: fatal error: _ctermid.h: No such file or directory
      219 | #include <_ctermid.h>
          |          ^~~~~~~~~~~~
    compilation terminated.
    

    해결책


    참조macos - Can't compile C program on a Mac after upgrade to Mojave - Stack Overflow.아직 해결되지 않았기 때문에 소홀히 할 수도 있지만 (실제로 한 번 통과했다) 내용을 읽으면 해결된다.운영체제를 Mojave의 일부 버전으로 업그레이드하면 /usr/include 디렉터리가 사라질 것 같습니다.
    자신의 기기의 상태를 확인한 결과 아래쪽/usr/include이 없기 때문에 이랬을 것이다.
    ~ ls /usr/include
    ls: /usr/include: No such file or directory
    
    먼저 GUI로 xcode를 시작하여 소프트웨어 설치를 완료합니다.
    (안 해도 될지도 모르지만, 했으니까 검증이 안 돼.)
    open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
    
    를 실행하면/usr/include/가 생성됩니다.
    ~ ls /usr/include
    AppleTextureEncoder.h   grp.h                   ranlib.h
    AssertMacros.h          gssapi/                 readline/
    Availability.h          gssapi.h                readpassphrase.h
    AvailabilityInternal.h  hfs/                    regex.h
    AvailabilityMacros.h    histedit.h              removefile.h
    Block.h                 i386/                   resolv.h
    CommonCrypto/           iconv.h                 rpc/
    ConditionalMacros.h     ifaddrs.h               rpcsvc/
    Darwin.apinotes         inttypes.h              rune.h
    MacTypes.h              iso646.h                runetype.h
    NSSystemDirectories.h   kern/                   sandbox.h
    TargetConditionals.h    krb5/                   sasl/
    Xplugin.h               krb5.h                  sched.h@
    __cxxabi_config.h       langinfo.h              search.h
    __wctype.h              launch.h                secure/
    _ctype.h                lber.h                  security/
    _locale.h               lber_types.h            semaphore.h
    _regex.h                ldap.h                  servers/
    _stdio.h                ldap_cdefs.h            setjmp.h
    _types/                 ldap_features.h         sgtty.h
    _types.h                ldap_schema.h           signal.h
    _wctype.h               ldap_utf8.h             simd/
    _xlocale.h              ldif.h                  slapi-plugin.h
    aio.h                   libc.h                  spawn.h
    aliasdb.h               libcharset.h            sqlite3.h
    alloca.h                libexslt/               sqlite3ext.h
    apache2/                libgen.h                stab.h
    apr-1/                  libkern/                standards.h
    ar.h                    libproc.h               stddef.h
    architecture/           libunwind.h             stdint.h
    arpa/                   libxml2/                stdio.h
    asl.h                   libxslt/                stdlib.h
    assert.h                limits.h                strhash.h
    atm/                    localcharset.h          string.h
    bank/                   locale.h                stringlist.h
    bitstring.h             mach/                   strings.h
    bootparams.h            mach-o/                 struct.h
    bootstrap.h             mach_debug/             sys/
    bsm/                    machine/                sysdir.h
    bzlib.h                 malloc/                 sysexits.h
    cache.h                 math.h                  syslog.h
    cache_callbacks.h       membership.h            tar.h
    checkint.h              memory.h                tcl.h@
    com_err.h               menu.h                  tclDecls.h@
    complex.h               miscfs/                 tclPlatDecls.h@
    compression.h           module.modulemap        tclTomMath.h@
    copyfile.h              monetary.h              tclTomMathDecls.h@
    corpses/                monitor.h               term.h
    cpio.h                  mpool.h                 term_entry.h
    crt_externs.h           nameser.h               termcap.h
    ctype.h                 nc_tparm.h              termios.h
    cups/                   ncurses.h@              tgmath.h
    curl/                   ncurses_dll.h           tic.h
    curses.h                ndbm.h                  tidy/
    cxxabi.h                net/                    time.h
    db.h                    net-snmp/               timeconv.h
    default_pager/          netdb.h                 tk.h@
    device/                 netinet/                tkDecls.h@
    dirent.h                netinet6/               tkIntXlibDecls.h@
    disktab.h               netkey/                 tkMacOSX.h@
    dispatch/               nfs/                    tkPlatDecls.h@
    dlfcn.h                 nl_types.h              ttyent.h
    dns.h                   nlist.h                 tzfile.h
    dns_sd.h                notify.h                ucontext.h
    dns_util.h              notify_keys.h           ulimit.h
    dtrace.h                ntsid.h                 unctrl.h
    editline/               objc/                   unistd.h
    err.h                   odmodule/               unwind.h
    errno.h                 os/                     util.h
    eti.h                   panel.h                 utime.h
    execinfo.h              paths.h                 utmp.h
    expat.h                 pcap/                   utmpx.h
    expat_external.h        pcap-bpf.h              uuid/
    fcntl.h                 pcap-namedb.h           vfs/
    fenv.h                  pcap.h                  vis.h
    ffi/                    pexpert/                voucher/
    float.h                 php/                    vproc.h
    fmtmsg.h                poll.h                  wchar.h
    fnmatch.h               printerdb.h             wctype.h
    form.h                  printf.h                wordexp.h
    fsproperties.h          profile.h               xar/
    fstab.h                 protocols/              xattr_flags.h
    fts.h                   pthread/                xlocale/
    ftw.h                   pthread.h@              xlocale.h
    get_compat.h            pthread_impl.h@         xpc/
    gethostuuid.h           pthread_spis.h@         zconf.h
    getopt.h                pwd.h                   zlib.h
    glob.h                  python2.7@
    
    재편역.변함없이 오류가 발생하다.
    ~ /usr/local/Cellar/gcc/10.2.0_3/bin/c++-10 string.cpp
    In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/wchar.h:90,
                     from /usr/local/Cellar/gcc/10.2.0_3/include/c++/10.2.0/cwchar:44,
                     from /usr/local/Cellar/gcc/10.2.0_3/include/c++/10.2.0/bits/postypes.h:40,
                     from /usr/local/Cellar/gcc/10.2.0_3/include/c++/10.2.0/bits/char_traits.h:40,
                     from /usr/local/Cellar/gcc/10.2.0_3/include/c++/10.2.0/string:40,
                     from string.cpp:one:
    /usr/local/Cellar/gcc/10.2.0_3/lib/gcc/10/gcc/x86_64-apple-darwin18/10.2.0/include-fixed/stdio.h:219:10: fatal error: _ctermid.h: No such file or directory
      219 | #include <_ctermid.h>
          |          ^~~~~~~~~~~~
    compilation terminated.
    
    -I 옵션에 지정된 /usr/include를 컴파일합니다.
    /usr/local/Cellar/gcc/10.2.0_3/bin/c++-10 -I/usr/include string.cpp
    
    성공했어!

    좋은 웹페이지 즐겨찾기