이 글에서는 Linux 환경에서 g++로 C++를 컴파일하는 방법과 관련 예제 코드 공유를 주로 공유합니다. 모두에게 도움이 되기를 바랍니다.
단일 소스 파일이 실행 가능한 프로그램을 생성합니다
다음은 helloworld.cpp 파일에 저장된 간단한 C++ 프로그램의 코드입니다.
/* helloworld.cpp */ #include <iostream> int main(int argc,char *argv[]) { std::cout << "hello, world" << std::endl; return(0); }
프로그램은 헤더 파일 iostream에 정의된 cout을 사용하여 간단한 문자열이 표준 출력에 기록됩니다. 이 코드는 다음 명령을 사용하여 실행 파일로 컴파일할 수 있습니다.
$ g++ helloworld.cpp
컴파일러 g++는 명령줄에 지정된 파일의 접미사 이름을 확인하여 C++ 소스 코드 파일을 식별할 수 있습니다. 컴파일러의 기본 동작: 소스 코드 파일을 컴파일하여 객체 파일(객체 파일)을 생성하고, 객체 파일과 libstdc++ 라이브러리의 함수를 연결하여 실행 가능한 프로그램을 얻습니다. 그런 다음 개체 파일을 삭제합니다. 실행 프로그램의 파일 이름이 명령줄에 지정되지 않으므로 컴파일러는 기본 a.out을 사용합니다. 프로그램은 다음과 같이 실행할 수 있습니다:
$ ./a.out hello, world
보다 일반적인 접근 방식은 -o 옵션을 통해 실행 가능한 프로그램의 파일 이름을 지정하는 것입니다. 다음 명령은 helloworld라는 실행 파일을 생성합니다.
$ g++ helloworld.cpp -o helloworld
이를 실행하려면 명령줄에 프로그램 이름을 입력하세요.
$ ./helloworld hello, world
프로그램 g++는 gcc의 기본 언어를 다음으로 설정하는 특수 프로그램입니다. C++ 버전에서는 링크 시 C 표준 라이브러리 대신 C++ 표준 라이브러리를 자동으로 사용합니다. 소스 코드의 명명 규칙을 따르고 해당 라이브러리의 이름을 지정하면 다음 예와 같이 gcc를 사용하여 C++ 프로그램을 컴파일하고 링크하는 것이 가능합니다.
$ gcc helloworld.cpp -lstdc++ -o helloworld
option -l (ell) 접두사 lib와 접미사 .a를 추가하면 그 뒤에 오는 이름이 libstdc++.a 라이브러리의 이름으로 변환됩니다. 그런 다음 표준 라이브러리 경로에서 라이브러리를 찾습니다. gcc의 컴파일 과정과 출력 파일은 g++의 것과 완전히 동일합니다.
대부분의 시스템에서는 GCC를 설치하면 c++라는 프로그램이 함께 설치됩니다. 설치되면 다음 예와 같이 g++와 동일하며 사용법도 동일합니다.
$ c++ helloworld.cpp -o helloworld
여러 소스 파일이 실행 파일을 생성합니다.
g++에 두 개 이상의 소스 파일이 지정된 경우 command 를 실행하면 모두 컴파일되어 단일 실행 파일로 링크됩니다. 아래는 talk.h라는 헤더 파일입니다. 여기에는 함수 하나만 포함된 클래스의 정의가 포함되어 있습니다.
/* speak.h */ #include <iostream> class Speak { public: void sayHello(const char *); };
아래 목록은 talk.cpp 파일의 내용입니다. sayHello() 함수가 포함된 함수 본문 :
/* speak.cpp */ #include "speak.h" void Speak::sayHello(const char *str) { std::cout << "Hello " << str << "\n"; }
hellospeak.cpp 파일은 Speak 클래스를 사용하는 프로그램입니다:
/* hellospeak.cpp */ #include "speak.h" int main(int argc,char *argv[]) { Speak speak; speak.sayHello("world"); return(0); }
다음 명령은 위의 두 소스 코드 파일을 컴파일하고 단일 실행 프로그램으로 링크합니다.
$ g++ hellospeak.cpp speak.cpp -o hellospeak
추신: "speak.h" 파일이 명령에 언급되지 않은 이유에 대해 이야기해 보겠습니다. (이유는 "#include "speak.h""가 "speak.cpp"에 포함되어 있다는 의미입니다. 시스템 헤더 파일을 검색하기 전에 디렉터리에 있는 경우 "speak.h" 파일이 현재 디렉터리에서 검색됩니다. 그리고 "speak.h"는 이 디렉터리에 있으므로 명령에 지정할 필요가 없습니다. 소스 파일은 객체 파일을 생성합니다
-c 옵션은 컴파일러에게 소스 코드를 컴파일하지만 링크를 수행하지 않도록 지시하는 데 사용되며, 출력 결과는 객체 파일입니다. 기본 파일 이름은 접미사가 .o로 변경된 점을 제외하면 소스 파일 이름과 동일합니다. 예를 들어 다음 명령은 소스 파일 hellospeak.cpp를 컴파일하고 개체 파일 hellospeak.o를 생성합니다.
$ g++ -c hellospeak.cpp
Command g++는 .o 파일도 인식하여 링커에 입력 파일로 전달할 수 있습니다. 다음 명령은 소스 파일을 개체 파일로 컴파일하고 이를 단일 실행 프로그램으로 연결합니다.
$ g++ -c hellospeak.cpp $ g++ -c speak.cpp $ g++ hellospeak.o speak.o -o hellospeak
-o 옵션은 실행 파일 이름을 지정하는 것 이상의 용도로 사용할 수 있습니다. 또한 컴파일러가 출력하는 다른 파일의 이름을 지정하는 데에도 사용됩니다. 예: 다음 명령은 중간 개체 파일의 이름이 다르다는 점을 제외하고 위와 정확히 동일한 실행 파일을 생성합니다.
$ g++ -c hellospeak.cpp -o hspk1.o $ g++ -c speak.cpp -o hspk2.o $ g++ hspk1.o hspk2.o -o hellospeak
Compile preprocessing
Option -E는 g++에서 소스 코드를 사용하도록 합니다. 작업은 컴파일 전처리기가 처리된 후에 수행됩니다. 다음 명령은 소스 코드 파일 helloworld.cpp를 전처리하고 결과를 표준 출력에 표시합니다.
$ g++ -E helloworld.cpp
이 기사 앞부분에 나열된 helloworld.cpp의 소스 코드에는 6줄만 있고 프로그램은 1줄만 표시합니다. of text 다른 작업은 수행하지 않지만 전처리된 버전은 1200줄이 넘습니다. 이는 주로 헤더 파일 iostream이 포함되어 있고 다른 헤더 파일도 포함되어 있기 때문입니다. 또한 입력 및 출력을 처리하는 여러 클래스에 대한 정의가 있습니다.
전처리된 파일의 GCC 접미사는 .ii이며 -o 옵션으로 생성할 수 있습니다. 예:
$ gcc -E helloworld.cpp -o helloworld.ii
어셈블리 코드 생성
옵션 -S는 컴파일러에게 다음을 컴파일하도록 지시합니다. 어셈블리 언어로 프로그래밍하고 어셈블리 언어 코드를 출력한 다음 종료합니다. 다음 명령은 C++ 소스 코드 파일에서 어셈블리 언어 파일 helloworld.s를 생성합니다.
$ g++ -S helloworld.cpp
生成的汇编语言依赖于编译器的目标平台。
创建静态库
静态库是编译器生成的一系列对象文件的集合。链接一个程序时用库中的对象文件还是目录中的对象文件都是一样的。库中的成员包括普通函数,类定义,类的对象实例等等。静态库的另一个名字叫归档文件(archive),管理这种归档文件的工具叫 ar 。
在下面的例子中,我们先创建两个对象模块,然后用其生成静态库。
头文件 say.h 包含函数 sayHello() 的原型和类 Say 的定义:
/* say.h */ #include <iostream> void sayhello(void); class Say { private: char *string; public: Say(char *str) { string = str; } void sayThis(const char *str) { std::cout << str << " from a static library\n"; } void sayString(void); };
下面是文件 say.cpp 是我们要加入到静态库中的两个对象文件之一的源码。它包含 Say 类中 sayString() 函数的定义体;类 Say 的一个实例 librarysay 的声明也包含在内:
/* say.cpp */ #include "say.h" void Say::sayString() { std::cout << string << "\n"; } Say librarysay("Library instance of Say");
源码文件 sayhello.cpp 是我们要加入到静态库中的第二个对象文件的源码。它包含函数 sayhello() 的定义:
/* sayhello.cpp */ #include "say.h" void sayhello() { std::cout << "hello from a static library\n"; }
下面的命令序列将源码文件编译成对象文件,命令 ar 将其存进库中:
$ g++ -c sayhello.cpp $ g++ -c say.cpp $ ar -r libsay.a sayhello.o say.o
程序 ar 配合参数 -r 创建一个新库 libsay.a 并将命令行中列出的对象文件插入。采用这种方法,如果库不存在的话,参数 -r 将创建一个新的库,而如果库存在的话,将用新的模块替换原来的模块。
下面是主程序 saymain.cpp,它调用库 libsay.a 中的代码:
/* saymain.cpp */ #include "say.h" int main(int argc,char *argv[]) { extern Say librarysay; Say localsay = Say("Local instance of Say"); sayhello(); librarysay.sayThis("howdy"); librarysay.sayString(); localsay.sayString(); return(0); }
该程序可以下面的命令来编译和链接:
$ g++ saymain.cpp libsay.a -o saymain
程序运行时,产生以下输出:
hello from a static library howdy from a static library Library instance of Say Local instance of Say
ps:如果一个文件夹下有多个cpp文件需要编译的话,除了采用makefile的方式之外,还可以使用“g++ *.cpp -o hello",“hello为编译生成的可执行文件的名字”,编译时要确保cpp文件和他们各自所引用的头文件在同一个目录下。
相关推荐:
위 내용은 Linux에서 g++를 사용하여 C++를 컴파일하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

시작시 init =/bin/bash 또는 단일 매개 변수를 추가하여 Linux 유지 관리 모드가 입력됩니다. 1. 유지 보수 모드를 입력하십시오 : 그루브 메뉴를 편집하고 시작 매개 변수를 추가하십시오. 2. 파일 시스템을 다시 마운트하여 읽고 쓰기 모드 : MOUNT-OREMOUNT, RW/. 3. 파일 시스템 수리 : FSCK/DEV/SDA1과 같은 FSCK 명령을 사용하십시오. 4. 데이터 손실을 피하기 위해 데이터를 백업하고주의해서 작동합니다.

이 기사에서는 데비안 시스템에서 Hadoop 데이터 처리 효율성을 향상시키는 방법에 대해 설명합니다. 최적화 전략에는 하드웨어 업그레이드, 운영 체제 매개 변수 조정, Hadoop 구성 수정 및 효율적인 알고리즘 및 도구 사용이 포함됩니다. 1. 하드웨어 리소스 강화는 모든 노드에 일관된 하드웨어 구성, 특히 CPU, 메모리 및 네트워크 장비 성능에주의를 기울일 수 있도록합니다. 전반적인 처리 속도를 향상시키기 위해서는 고성능 하드웨어 구성 요소를 선택하는 것이 필수적입니다. 2. 운영 체제 조정 파일 설명 자 및 네트워크 연결 : /etc/security/limits.conf 파일을 수정하여 파일 설명자의 상한을 늘리고 동시에 시스템에 의해 열 수 있습니다. JVM 매개 변수 조정 : Hadoop-env.sh 파일에서 조정

이 안내서는 데비안 시스템에서 syslog를 사용하는 방법을 배우도록 안내합니다. Syslog는 로깅 시스템 및 응용 프로그램 로그 메시지를위한 Linux 시스템의 핵심 서비스입니다. 관리자가 시스템 활동을 모니터링하고 분석하여 문제를 신속하게 식별하고 해결하는 데 도움이됩니다. 1. syslog에 대한 기본 지식 syslog의 핵심 기능에는 다음이 포함됩니다. 로그 메시지 중앙 수집 및 관리; 다중 로그 출력 형식 및 대상 위치 (예 : 파일 또는 네트워크) 지원; 실시간 로그보기 및 필터링 기능 제공. 2. Syslog 설치 및 구성 (RSYSLOG 사용) Debian 시스템은 기본적으로 RSYSLOG를 사용합니다. 다음 명령으로 설치할 수 있습니다 : sudoaptupdatesud

데비안 시스템에 적합한 Hadoop 버전을 선택할 때는 다음과 같은 주요 요소를 고려해야합니다. 1. 안정성 및 장기 지원 : 안정성과 보안을 추구하는 사용자의 경우 Debian11 (Bullseye)과 같은 데비안 안정 버전을 선택하는 것이 좋습니다. 이 버전은 완전히 테스트되었으며 최대 5 년의 지원주기가있어 시스템의 안정적인 작동을 보장 할 수 있습니다. 2. 패키지 업데이트 속도 : 최신 Hadoop 기능 및 기능을 사용해야하는 경우 Debian의 불안정한 버전 (SID)을 고려할 수 있습니다. 그러나 불안정한 버전에는 호환성 문제와 안정성 위험이있을 수 있습니다. 3. 커뮤니티 지원 및 자원 : 데비안은 풍부한 문서를 제공하고

이 기사에서는 Tigervnc를 사용하여 데비안 시스템에서 파일을 공유하는 방법에 대해 설명합니다. 먼저 tigervnc 서버를 설치 한 다음 구성해야합니다. 1. TigervNC 서버를 설치하고 터미널을 엽니 다. 소프트웨어 패키지 목록 업데이트 : sudoaptupdate tigervnc 서버를 설치하려면 : sudoaptinstalltigervnc-standalone-servertigervnc-common 2. VNC 서버 비밀번호를 설정하도록 tigervnc 서버 구성 : vncpasswd vnc 서버 : vncserver : 1-localhostno

데비안 메일 서버의 방화벽 구성은 서버 보안을 보장하는 데 중요한 단계입니다. 다음은 iptables 및 방화구 사용을 포함하여 일반적으로 사용되는 여러 방화벽 구성 방법입니다. iptables를 사용하여 iptables를 설치하도록 방화벽을 구성하십시오 (아직 설치되지 않은 경우) : sudoapt-getupdatesudoapt-getinstalliptablesview 현재 iptables 규칙 : sudoiptables-l configuration

Debian Mail 서버에 SSL 인증서를 설치하는 단계는 다음과 같습니다. 1. OpenSSL 툴킷을 먼저 설치하십시오. 먼저 OpenSSL 툴킷이 이미 시스템에 설치되어 있는지 확인하십시오. 설치되지 않은 경우 다음 명령을 사용하여 설치할 수 있습니다. 개인 키 및 인증서 요청 생성 다음에 다음, OpenSSL을 사용하여 2048 비트 RSA 개인 키 및 인증서 요청 (CSR)을 생성합니다.

Debian 시스템에서 메일 서버의 가상 호스트를 구성하려면 일반적으로 Apache가 웹 서버 기능에 주로 사용되기 때문에 Apache Httpserver가 아닌 Mail Server 소프트웨어 (예 : Postfix, Exim 등)를 설치하고 구성하는 것이 포함됩니다. 다음은 메일 서버 가상 호스트 구성을위한 기본 단계입니다. PostFix Mail Server 업데이트 시스템 패키지 설치 : SudoaptupDatesudoAptUpgrade PostFix 설치 : Sudoapt


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기
