2011-09-19 2 views
3

C++로 커널을 개발 중입니다. 하지만 나는 stdlib을 쓰고 싶지 않습니다. 그 목적을 위해 STLporthttp://www.stlport.org/을 다운로드했지만 어떻게 설치하고 사용하는지 모르겠습니다.내 커널에서 STLPort를 사용하는 방법은 무엇입니까?

커널을 빌드 할 때 Linux를 사용하고 있습니다.

커널에서 C++ 표준 라이브러리를 어떻게 사용할 수 있습니까?

그리고 STLport에서 모든 라이브러리를 포팅하고 싶지 않습니다. 어떻게하면 libs를 제외 할 수 있습니까? std::string, std::vector

+0

부스트를 2.6.35로 늘리면 어떨까요? 나는 그것이 당신의 모든 필요에 부합해야한다고 생각합니다! –

+0

배포자 란 무엇입니까? – CharlesB

+0

답장을 보내 주셔서 감사합니다. 그러나 저는 커널을 개발하기 위해 Linux Kernel을 추천하지 않습니다. 나는 유닉스뿐만 아니라 리눅스와 완전히 다른 커널을 개발 중이다. –

답변

3

STL이 작동하려면 정적 초기화 (예 : std :: cin 및 std :: cout)와 같은 여러 가지 포트를 포개고 unwinding을 스택해야합니다.

당신은 ie : libsupC++ 포트를 커널에 가지고 있어야합니다. 기본적으로이 모든 것들은 처음에는 커널에 있어서는 안됩니다. DO NOT 사용 벡터는 데이터를 다시 할당 할 수 있으므로 정적 배열을 사용합니다!

또한 모든 것들이 커널을 부 풀릴 것입니다!

당신은 L4가 커널에서 사용되는 것을 볼 수 있습니다. 그들은 메모리 할당을하지 않으며 예외 (예측할 수 없음)를하지 않으며 특히 STL을 수행하지 않습니다.

후자의 링크는 C++ 운영 체제 지원을 받기 위해 필요한 포트를 제공합니다. LibsupC++는 gcc의 일부입니다. 런타임 코드가 필요한 모든 부분을 캡슐화하는 것이 목적입니다.

Useful information about libsupc++

Useful information about c++ operating system support

+0

어떻게하면됩니까? 나는 그 절차를 모른다. STLport를 설치할 때'/ usr/bin/ld : -lsupC++'을 찾을 수 없다는 오류가 나타납니다. –

+0

@Dnyanesh : (업데이트 된) 답변에 게시 한 링크를보십시오 – Alex

3

아마도 커널 개발에 STL을 사용하지 말 것을 권장합니다. STL은 커널에 아무 것도없는 표준 라이브러리 지원 형태를 취할 것입니다. 또한 대부분의 메모리 할당 작업에는 걸릴 수있는 시간에 대한 경계가 없으므로 인터럽트 처리기에서 사용하기에 적합하지 않습니다. 예외는 커널의 주요 골칫거리가 될 수있는 또 다른 것입니다

+0

STL의 모든 함수를 사용하고 싶지 않기 때문에 std :: string, std :: vector, math.h와 같은 기본 STL 만 사용하여 커널에 영향을 미치지 않습니다. 표준 iostream lib 싶지만 내 시스템 함수'write' 또는'put_char' 호출해야합니다. 그래서 제발 도와주세요, 어떻게 그럴 수 있습니까? –

+1

STL은 메모리 할당 자체를 수행하지 않습니다. 이것이 표준 라이브러리의 또 다른 부분입니다. 그는 C++로 커널을 작성하고 있다고 생각하여 아마도 커널 사용에 적합한 '연산자 new'를 가지고있을 것입니다. – MSalters

+0

예, 저는 메모리 할당을 위해 적절한 '연산자 new'를가집니다. IO 연산, 문자열 연산, 대수 연산 등 매우 기본적인 함수를 사용하기를 원합니다. 감사합니다. –

2

나는 커널 STL 가지고 실제로 좋은,하지만 당신은 정말 시도하려는 경우, 그것은 매우 재미 있는지 모르겠습니다. 필자는 자체 OS를 작성했으며 커널에 메모리 할당이있을 때 가장 먼저 STLport (5.2.1)를 포팅했습니다. 커널 자체가 여전히 너무 예비 적이기는하지만 지금까지 잘 작동했습니다.

어쨌든 포팅에 대한 경험이 있습니다.

  1. 포팅 된 STLport는 어떤 건물을 필요로하지 않으며 거의 ​​필수, 그냥 헤더를 포함하고 경로 (GCC에 대한 -I 옵션) 알고 컴파일러를 할 수 있습니다. 템플릿 클래스는 cpp 소스 파일로 컴파일됩니다.

  2. STLport를 구성 할 수 없기 때문에 iostream, 디버그, 예외, RTTI 및 스레딩과 같이 원하는 것을 선택할 수 없습니다. 문서를 체크 아웃 한 다음 구성 헤더에 도달하면 매우 잘 주석 처리됩니다 (예 : stlport/stl/config/user_config).시간) 당신이 mallocfree, 아니면 new, delete 및 변형이 필요합니다 가장 기본으로

  3. . 그것은 표준 문자열, 컨테이너 및 알고리즘, IIRC 포팅에 충분합니다. 하지만 스레드 안전성이나 메모리 할당 최적화가 아니기 때문에 의존 할 때는 매우 조심해야합니다.

  4. iostream을 소유 할 수 있습니다. 템플릿 클래스 및 전역 개체 (BTW, ELF 섹션을 해킹하고 함수를 호출하여 전역 개체를 수동으로 초기화 한)이지만 더 많은 작업이 필요합니다.

This link은 내 OS 프로젝트의 github에 대한 것으로, 나는 그것이 당신에게 영감을 줄 수 있기를 바랍니다.

관련 문제