CC, gcc, g++의 차이?
어셈블리 코드 생성, 사용 가능한 라이브러리, 언어 기능 등에서 C 및 C++ 코드를 컴파일할 때 3개의 컴파일러 CC, gcc, g++의 차이점은 무엇입니까?
이에 대한 답은 플랫폼에 따라 다릅니다.예를 들어 Linux에서 발생하는 동작은 Solaris에서 발생하는 동작과는 다릅니다.
(플랫폼 고유의 것이 아니기 때문에) 쉬운 부분은 'gcc'와 'g++'를 분리하는 것입니다.
- gcc는 GCC(GNU 컴파일러 컬렉션)의 GNU C 컴파일러입니다.
- g++는 GCC의 GNU C++ 컴파일러입니다.
플랫폼에 따라 다르므로 어려운 부분은 'CC'(및 'cc')의 의미입니다.
- Solaris에서 CC는 보통 Sun C++ 컴파일러 이름입니다.
- Solaris에서 cc는 보통 Sun C 컴파일러 이름입니다.
- Linux에서 CC가 존재하는 경우 CC는 g++에 대한 링크일 수 있습니다.
- Linux에서 cc는 gcc에 대한 링크입니다.
단, Solaris에서도 cc가 오래된 BSD 기반의 C 컴파일러일 수 있습니다./usr/ucb
실제로, 이것은 인스톨 되어 있지 않고, 스탭이 고장나, 자기 설정 소프트웨어를 컴파일 해 인스톨 하려고 하는 유저에게 큰 피해를 줍니다.
HP-UX에서 기본 'cc'는 K&R 전용 C 컴파일러로 필요할 때 커널의 재링크를 허용하며 표준 C를 지원하지 않기 때문에 최신 소프트웨어 작업에 사용할 수 없습니다.대체 컴파일러 이름('acc' IIRC)을 사용해야 합니다.마찬가지로 AIX에서 시스템 C 컴파일러는 'xlc' 또는 'xlc32'와 같은 이름으로 통합니다.
일반적으로 기본 시스템 컴파일러는 'cc'라고 불리며 자기 설정 소프트웨어는 다른 어떤 것을 사용해야 할지 모를 때 그 이름으로 돌아갑니다.
POSIX는 프로그램 c89(원래)와 그 이후의 c99를 요구함으로써 이 문제를 해결하기 위해 노력하고 있습니다.이것들은 ISO/IEC 9899:1989 및 9899:1999 C 표준과 호환되는 컴파일러입니다.POSIX가 성공했는지 의심스럽다.
이 질문에서는 기능과 라이브러리의 차이에 대해 질문합니다.이전과 마찬가지로 답변은 부분적으로 플랫폼 고유하고 일부는 일반적입니다.
큰 차이는 C 컴파일러와 C++ 컴파일러의 차이입니다.C++ 컴파일러는 C++ 프로그램을 받아들이며 임의의 C 프로그램을 컴파일하지 않습니다.(C++에서도 인식되는 서브셋에 C를 쓸 수 있지만 많은 C 프로그램은 유효한 C++ 프로그램이 아닙니다.)마찬가지로 C 컴파일러는 C 프로그램을 받아들여 대부분의 C++ 프로그램을 거부합니다(대부분의 C++ 프로그램은 C에서 사용할 수 없는 구성을 사용하기 때문입니다).
사용할 수 있는 라이브러리 세트는 언어에 따라 달라집니다.C++ 프로그램은 보통 특정 플랫폼에서 C 라이브러리를 사용할 수 있지만, C 프로그램은 보통 C++ 라이브러리를 사용할 수 없습니다.따라서 C++는 더 큰 라이브러리 세트를 사용할 수 있습니다.
Solaris에 있는 경우 CC에 의해 생성된 오브젝트코드는 g++에 의해 생성된 오브젝트코드와 호환되지 않습니다.이것들은 예외처리나 이름망글링 등의 규칙을 가진 2개의 독립된 컴파일러입니다(또한 이름이 서로 호환되지 않는 오브젝트파일이 서로 링크되지 않도록 하기 위해 의도적으로 다릅니다).즉, CC로 컴파일된 라이브러리를 사용하려면 프로그램 전체를 CC로 컴파일해야 합니다.또한 CC로 컴파일된 라이브러리와 g++로 컴파일된 라이브러리를 사용하려는 경우 운이 없다는 것을 의미합니다.적어도 라이브러리 중 하나를 다시 컴파일해야 합니다.
생성되는 어셈블러의 품질에 있어서 GCC(GNU 컴파일러 컬렉션)는 매우 뛰어난 성능을 발휘합니다.하지만 가끔은 네이티브 컴파일러가 더 잘 작동하기도 합니다.인텔 컴파일러는 GCC에서 아직 복제되지 않은 보다 광범위한 최적화 기능을 갖추고 있다고 생각합니다.하지만 당신이 어떤 플랫폼에 관심이 있는지 알 수 없는 동안 그러한 모든 교황직은 위험합니다.
언어 기능에 관해서는 컴파일러는 일반적으로 현재의 표준(C++98, C++2003, C99)에 상당히 가깝지만 표준 언어와 컴파일러가 지원하는 언어 사이에는 작은 차이가 있습니다.구형 C89 표준 지원은 기본적으로 모든 C 컴파일러에서 동일합니다.언어의 어두운 구석에는 차이가 있다.'정의되지 않은 동작', '시스템 정의되지 않은 동작' 및 '지정되지 않은 동작'을 이해해야 합니다. 정의되지 않은 동작을 호출하면 시간에 따라 다른 결과를 얻을 수 있습니다.컴파일러의 동작을 조정하는 옵션(특히 GCC의 경우)도 많이 있습니다.GCC에는 컴파일러 패밀리만을 대상으로 하고 있는 경우, 생활을 심플하게 하는 다양한 확장 기능이 있습니다.
CC
는 시스템의 C 컴파일러를 참조하는 환경 변수입니다.무엇을 가리키는가(라이브러리 액세스 가능 등)는 플랫폼에 따라 다릅니다.종종 그것은 다음을 가리킬 것이다./usr/bin/cc
, 실제 c 컴파일러(드라이버).Linux 플랫폼에서는CC
거의 항상 가리키다/usr/bin/gcc
.
gcc
는 GNU 컴파일러 컬렉션용 드라이버 바이너리입니다.C, C++ 및 기타 언어를 컴파일할 수 있습니다.파일 확장자에 따라 언어가 결정됩니다.
g++
드라이버 바이너리입니다.gcc
단, C++ 컴파일을 위한 몇 가지 특별한 옵션이 설정되어 있습니다.특히 (내 경험으로는)g++
디폴트로 libstdc++를 링크합니다.gcc
않을 것이다.
Linux에서 cc가 무엇인지 한 가지 정보만 추가하고 싶습니다.gcc와 링크되어 있습니다.확인하기 위해서.
마찬가지로 c++에서도 마찬가지입니다.
uddhavpgautam@UbuntuServer1604:~/Desktop/c++$ whereis c++
c++: /usr/bin/c++ /usr/include/c++ /usr/share/man/man1/c++.1.gz
uddhavpgautam@UbuntuServer1604:~/Desktop/c++$ ls -l /usr/bin/c++
lrwxrwxrwx 1 root root 21 Jul 31 14:00 /usr/bin/c++ -> /etc/alternatives/c++
uddhavpgautam@UbuntuServer1604:~/Desktop/c++$ ls -l /etc/alternatives/c++
lrwxrwxrwx 1 root root 12 Jul 31 14:00 /etc/alternatives/c++ -> /usr/bin/g++
언급URL : https://stackoverflow.com/questions/1516609/difference-between-cc-gcc-and-g
'source' 카테고리의 다른 글
Vue 구성 요소를 테스트할 때 측면 플러그인을 시뮬레이션하는 방법 (0) | 2022.09.01 |
---|---|
모듈 저장소가 상태로 재설정됨 (0) | 2022.09.01 |
axios를 사용하여 vuex의 API에서 데이터를 얻는 방법은 무엇입니까? (0) | 2022.09.01 |
Vuex에서 vue 인스턴스에 액세스하는 방법 (0) | 2022.09.01 |
Vuex의 setimeout 기능 내 상태를 변경 및 커밋할 수 있습니까? (0) | 2022.09.01 |