저작권 안내
- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
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
#cgo에 LDFLAGS:로 링크 옵션을 설정합니다. -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 공유는 허용합니다.