반응형
CBuilder Project 에는 c 와 cpp 모두 참여 시킬 수 있습니다.
그러나 컴파일러는 서로 다르게 컴파일 합니다.

c 는 말그대로 c 컴파일을 수행하고요 cpp 는 cpp 컴파일을 수행합니다.
c 와 cpp 는 구분상 별 차이는 없으나
cpp 는 class 구문이 추가 되었다는것이죠.
기타 다른 차이점도 다소 있겠지만요.

c source 에서는 vcl.h 를 사용못한다는 것도 결론적인 차이겠군요.

사실 더 큰차이는
서로 함수의 선언 부분입니다.
a.cpp 와 b.c 가 있다고 가정하고 두개 모두 같은 프로젝트에 있다고 가정하죠.

a.cpp 에
void acpp() 함수가 있다고 가정하고

b.c 에
void bc() 라는 함수가 있다고 가정하면

a.cpp 에서는 bc() 함수를 호출 못합니다.
또한 b.c  에서도 acpp() 함수를 호출 못합니다.

단..
함수를 이렇게 선언하면 서로 호출 할 수 있습니다.
extern "C"{
   void acpp();
   void bc();
};

컴파일러는 함수를 컴파일 할때 함수명 그대로 가지지 않습니다.
변형을 하게 되는데요.. c 에서와 cpp 에서는 서로 다릅니다.
c 에서는 cpp 형태를 못만들기 때문에 cpp 에서 c 형식으로 만드는 것 이죠.

cpp 에서도 c 구문을 다 쓰실수 있으니까 가능하면 cpp 로 통일해서 (저같은 경우 이런상황이라면
모든 c를 cpp 라 rename 하는 경우가 많습니다) 사용하시는게 좋을것 같습니다.

즉 CBuilder 는 확장자를 이용해 컴파일러를 선택 합니다. pas 는 pascal , c 는 c , cpp 는 cpp죠
같은 컴파일러라도 내부적으로 컴파일은 다른것 입니다.
반응형
Ø

라이브러리란?
특정한 코드(함수 혹은 클래스)를 포함하고 있는 컴파일된 파일이다.

라이브러리를 만드는 이유?
 자주 사용되는 특정한 기능을 main 함수에서 분리시켜 놓음으로써, 프로그램을 유지, 디버깅을 쉽게하고 컴파일 시간을 좀더 빠르게 할수 있기 때문이다.

라이브러리에도 그 쓰임새에 따라서 여러가지 종류가 있다(크게 3가지). 가장 흔하게 쓰일수 있는 "정적라이브러리"와 "공유라이브러리", "동적라이브러리" 가 있다.

이들 라이브러리가 서로 구분되어지는 특징은 적재 시간이 될것이다.

정적라이브러리

정적라이브러리는 object file(.o로 끝나는) 의 단순한 모음이다. 정적라이브러린느 보통 .a 의 확장자를 가진다. 간단히 사용할수 있다. 컴파일시 적재되므로 유연성이 떨어진다. 최근에는 정적라이브러리는 지양되고 있는 추세이다. 컴파일시 적재되므로 아무래도 바이너리크기가 약간 커지는 문제가 있을것이다.

공유라이브러리

공유라이브러리는 프로그램이 시작될때 적재된다. 만약 하나의 프로그램이 실행되어서 공유라이브러리를 사용했다면, 그뒤에 공유라이브러리를 사용하는 모든 프로그램은 자동적으로 만들어져 있는 공유라이브러리를 사용하게 된다. 그럼으로써 우리는 좀더 유연한 프로그램을 만들수 잇게 된다.

정적라이브러리와 달리 라이브러리가 컴파일시 적재되지 않으므로 프로그램의 사이즈 자체는 작아지지만 이론상으로 봤을때, 라이브러리를 적재하는 시간이 필요할것이므로 정적라이브러리를 사용한 프로그램보다는 1-5% 정도 느려질수 있다. 하지만 보통은 이러한 느림을 느낄수는 없을것이다.

동적라이브러리

공유라이브러리가 프로그램이 시작될때 적재되는 반면 이것은 프로그램시작중 특정한때에 적재되는 라이브러리이다. 플러그인 모듈등을 구현할때 적합하다. 설정파일등에 읽어들인 라이브러리를 등록시키고 원하는 라이브러리를 실행시키게 하는등의 매우 유연하게 작동하는 프로그램을 만들고자 할때 유용하다.

– MS VC++  라이브러리 만들기


사용자 삽입 이미지
1.project name란에 라이브러리 이름 작성
사용자 삽입 이미지
사용자 삽입 이미지












2.test.c 파일을 생성한다.(함수 정의(구현)부분에 대한 내용)

3.test.h 파일을 생성한다.(함수의 선언부분이 있는곳)

사용자 삽입 이미지

 
//나만의 덧셈 라이브러리 만들기
#include <stdio.h>
#include "test.h"
//덧셈 함수 구현부분
int Add(int a,int b)
{
   return a+b;
}




3.test.h 에 함수에 대한 선언
   ex> int Add(int a, int b);
4.컴파일 하면 Debug 디렉토리 안에 프로젝트명.lib 이 생성

그 다음은 헤더파일을 해당 프로젝트에 넣고 라이브러리 링크
시키면 사용됨.

C로 만든 라이브러리를 C++ 프로젝트에 사용할때는 주의를 하자.
컴파일 과정에서 만들어진 라이브러리의 함수명이 차이가 있다.
C 로 만든 라이브러리는 C프로젝트에서..
C++로 만든 라이브러리는 C++프로젝트에서..
다른 방법으로는 위에 글에 설명..
반응형

윈속을 쓰는데 라이브러리를 추가해야 하더라고요.
요놈.. ^^ ws2_32.lib wsock32.lib 두개의 라이브러리 파일 추가

디폴트 프로젝트에 라이브러리가 자동으로 포함되지 않기 때문에..

visual studio 2005에서는

프로젝트(P) -> 속성(P) (alt+F7) -> 구성 속성 -> 링커 -> 입력 -> 추가 종속성 에

추가해 주는 방법이 있습니다..

그 외에는 두가지 방법이 있네요.

1. #pragma comment(lib,"ws2_32.lib")
이걸 헤더파일에 추가해주는방법

2. 라이브러리를 링크시켜주는 방법
프로젝트 이름을 선택하신후 오른쪽 버튼 - ADD - Existing Item...에서 디렉토리 찾아서 ws2_32.lib를 넣어주면 됩니다. ^^
winmm.lib(windows multimedia를 의미) 라이브러리를 추가해 주어야 한다.


+ Recent posts