gcc porting에서 c++쓸때 필요한 작업이 뭐가 있나요...?
암9 보드에서 gcc로 크로스 컴파일해서 프로그램중인데요...
개인적인 :lol: 취미로 c++이 될까 해서 봤더니 컴파일러는
있네요... (보드 제작 업체에서 같이 배포한 gcc 컴파일러
패키지? 에 있더군요.) 문제는 crt0.o 및 기타 메모리 할당
관련 작업이 필요할 것 같은데요... 스타트업코드나 그밖에
직접 만들어야 하는 코드 같은 것들이 있을까요...?
대략 생각에는 힙 설정하고 ld 쪽 스크립트만 손봐주면 메모리
할당은 큰 문제 없을 것 같다는 '느낌 :cry: '이 드네요.
그밖에 operator new 나 operator delete 등등은 대략
테스트해봤더니 링커에서 그런 함수 없다고 찡찡대는 걸로봐서
직접 만들어줘야 되나 싶구요...
클래스 하나 만들어봤더니... linkonce인가 하는 게 없다고
나오는데 rtti 관련된 어떤 데이터 인것 같습니다만... 뭘 어쩌라는
건지 에러 메시지만으로는 그냥 없다... 라는 것밖에 모르겠군요...
주저리 주저리 써놓긴 했는데 정리가 안되네요...
1. 이건 c에서도 마찬가지지만 동적 메모리 할당을 위해 필요한 내용.
2. operator new, operator delete, ... 등은 정말로 포팅(?)할 때마다
새로 만들어야 하는건지...?
3. rtti 관련 데이터(로 추정되는 linkonce 따위의 것들...)는 어떻게
만들어 넣을 수 있는지
정확히(한지는 모르겠지만 하여튼) 이런 것들이 궁금하네요...
Re: gcc porting에서 c++쓸때 필요한 작업이 뭐가 있나요...?
gcc인가요?
gcc라면 c++ build시에 libstdc++ 도 같이 build 되어 있을 겁니다. toolchain안에 libstdc++.a , libsupc++.a 등 c++ 관련 library가 같이 포함되어 있는지 확인 해 보세요..
있는데 안되면 link 시에 gcc로 link 하지 말고 g++로 link를 해보세요.
이런것이 없다면 직접 toolchain build를 직접 하는 것이 좋을것 같습니다. 직접 build를 해도 시간만 좀 오래 걸리지 그리 복잡하지는 않습니다.
새로운 하드웨어에 실행할 코드를 만드려면 (OS 없이), startup code에서 해야 할 일은 C나 C++이나 별차이 없습니다. 보통은
- DATA를 rma으로 copy (rom에서 실행하는 경우)
- BSS를 0으로 초기화
- standard library 초기화 (allocation 관련 heap 설정 등 이겠죠)
기존에 있는 crt0.s 적당히 수정해서 사용하면 될테고요.
그리고 link scirpt에 memory map만 잘 잡아주면 될 겁니다.
c++이라면 demangle list인가(정확한 용어가?) 이것만 추가 처리 해주면 됩니다. 쉽게 풀어서 말하면 전역 class들의 constructor를 main이 실행되기 전에 호출해주고, exit시 destructor를 호출해주고... 물론 전역 class가 정의 되어 있지 않다면 이도 신경 쓸 필요 없죠..
댓글 달기