본문 바로가기

C++/g++

(3)
정적 라이브러리 생성 및 링킹.. [1. 개요]g++ -v --help 를 통해서, 모든 옵션을 확인 할 수 있다.[2. 코드 구조]main.cppcalc\s1.cpps2.cpputil.hpp[3. 절차]calc 라이브러리를 빌드하도록 한다.main.cpp 컴파일 시 calc 라이브러리를 링킹 하도록 한다.A. 라이브러리 빌드cd calcg++ -c s1.cpp s2.cpp# 컴파일 및 어셈블까지 하고, 링킹은 하지 않는다.# *.cpp 로 해도 된다.ar rcus libcalc.a *.o# 각 object 파일을 명시해도 된다. (s1.o  s2.o ...) # 현재 디렉터리에 있는 모든 object (.o) 파일을 하나의 파일로 묶어준다.# 일반적으로, .a 파일은 static 라이브러리 파일을 의미한다.# 일반적으로 ,lib.a 형..
정적 라이브러리 빌드 [1. 개요] 여러개의 소스코드로 이루어진 라이브러리를 정적라이브러리로 빌드 후, main() 함수가 정의 된 소스코드와 같이 컴파일 하는 과정 정리한다. CMake 형태의 C++ 프로젝트의 경우 cmake => make 로 컴파일을 쉽게 할 수 있지만, 새로운 라이브러리를 테스트 해야 하는 경우, 별도의 cmake 를 작성하는 것이 다소 부담스러울 수 있다. 이 경우, gcc(혹은 g++) 와 ar 을 이용하여 라이브러리 빌드 후, main() 과 링킹하여 간단하게 테스트 프로그램을 만들 수 있다. [2. 기본 개념] 정적 라이브러리 빌드는 보통 아래 과정을 거친다. 소스코드에 대해서 object 파일 생성 object 파일을 하나의 archive 파일로 묶는다. 1번 과정에서 gcc (g++) 를 사..
컴파일 링커 옵션 [1. 개요] g++ 로 컴파일 시, 링킹 시 유용한 옵션 정리 [2.1 예제] 스택 사이즈 변경 g++ -Wl,--stack,1677216 test.cpp 함수 호출 시, 이 함수 내 지역에 선언한 buf 의 크기가 꽤 큰 경우, 함수 호출 시, 바로 segmentation fault 가 발생할 수 있다. 함수 호출을 위해, 컴파일 시, 일정 크기의 스택에 모든 지역 변수를 저장 할 수 있어야 하는데, buf 크기가 이 크기를 벗어나서 문제가 된 것이다. 이 경우 디폴트 스택 크기를 꽤 크게 잡아주면 runtime 오류를 해결 할 수 있다. [2.2 예제] 외부 라이브러리 링킹 g++ main.cpp -lrdkafka++ -L"./" rdkafka 를 사용하는 c++ 코드 컴파일 시, rdfkafka ..