C 언어 컴파일 옵션 사용하기


이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07



C 언어를 사용하다보면 헤더 파일의 경로나 라이브러리 설정을 위해 다양한 컴파일 옵션을 사용하게 됩니다. 이번에는 Go 언어에서 C 언어의 컴파일 옵션을 설정하는 방법에 대해 알아보겠습니다.

다음은 zlib 압축 라이브러리를 사용하는 예제입니다.

package main

/*
#cgo LDFLAGS: -lz

#include <stdio.h>
#include <string.h>
#include <zlib.h>

void CExample() {
	char *text = "Hello, world!";
	unsigned long textSize = strlen(text);
	char buffer[1024] = {0, };
	unsigned long bufferSize = 1024;

	int err  = compress(buffer, &bufferSize, text, textSize); // zlib 함수로 압축
	printf("Compressed size: %lu\n", bufferSize);             // 압축한 크기 출력
	printf("zlib Version: %s\n", zlibVersion());              // zlib 버전 출력
}
*/
import "C"

func main() {
	C.CExample()
}

실행 결과

Compressed size: 19
zlib Version: 1.2.8

zlib 라이브러리의 함수를 사용한 뒤 그대로 컴파일하면 링크 에러가 발생합니다. 이때는 다음과 같이 C 언어 코드 윗 부분에 링크 옵션을 지정해줍니다.

#cgo LDFLAGS: -lz

#cgoLDFLAGS:로 링크 옵션을 설정합니다. -lz 옵션에서 -l은 라이브러리 옵션이며 z는 libz.a 라이브러리 파일 이름에서 lib을 제외한 z입니다.

만약 자신이 직접 만든 라이브러리라면 다음과 같이 컴파일, 링크 옵션을 설정하면 됩니다.

#cgo CFLAGS: -DHELLO_DEBUG=1 -I /home/pyrasis/hello/include
#cgo LDFLAGS: -L /home/pyrasis/hello/lib -lhello

CFLAGS로 gcc 컴파일 옵션을 지정하며 LDFLAGS로 링크 옵션을 지정하면 됩니다(옵션에 대한 자세한 설명은 리눅스기반 C 언어 자료를 참조하기 바랍니다).

  • -D: 프리프로세서(매크로) 설정 옵션입니다.
  • -I(대문자 i): 헤더 파일 경로 옵션입니다.
  • -L: 라이브러라 경로 옵션입니다.
  • -l(소문자 L): 라이브러리 링크 옵션입니다.

저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

01 June 2015