UTF16 driver code 빌드하는 방법 #73
Replies: 5 comments 6 replies
-
개발 방식이 엄청 흥미롭네요! 저도 C++코드 몇개를 빼다가 밖에서 프린트 하면서 돌려볼려 하다가 계속 실패했는데 컴파일러의 문제였을 수도 있겠군요ㅠㅠ 새로운 사실 배워갑니다. |
Beta Was this translation helpful? Give feedback.
-
@kuro11pow2 Native 개발시에는 완전 독립적으로 개발할 수 있도록 사실상 gradle과 독립적으로 구현되어 있긴 하지만 |
Beta Was this translation helpful? Give feedback.
-
@kuro11pow2 unit-test 상으로도 const_iterator로 큰 문제도 없으면서 오히려 더 다양한 환경에서 빌드되기도 하고 |
Beta Was this translation helpful? Give feedback.
-
준규님은 천재입니까..?? 감사합니다 !!👍👍👍👍 |
Beta Was this translation helpful? Give feedback.
-
엄청나네요... 감사합니다!! 🌟 |
Beta Was this translation helpful? Give feedback.
-
잘못된 내용 발견하시면 알려주세요 감사합니다!!
저희팀에서는 VSCode의 live share extension을 사용해서 페어프로그래밍을 체험해보려고 하는 중입니다! 그래서 UTF16 클래스와 관련된 코드를 Android Studio에서 빼내고 VSCode에서 개발하고 다시 넣으려고 하는데요, 밖으로 빼내서 빌드를 하려고보니 C++ STL 의존성이 발목을 잡더라구요. 알고보니 현재 Euphony 라이브러리에서 사용하는 네이티브 코드는 안드로이드 NDK에 prebuilt 되어있는 llvm의 libc++ 코드였습니다. 출처
그래서 해당 코드를 그대로 복사해서 일반적으로 사용하는 g++에서 빌드를 하면 돌아가지 않습니다. 구체적으로는 핵심적인 자료구조 중에 하나인
HexVector
클래스에서 begin, end 메소드를 구현할 때std::__wrap_iter
가 사용되는데 이게 mingw나 g++에서 컴파일이 되지 않더라구요. 그런데 문제는 llvm을 사용해서 컴파일해주는 clang를 사용해도 여전히 __wrap_iter가 없다고 나옵니다.아무튼 그래도 빌드는 해야 개발이 진행되겠죠? 그래서 문제가 되는 코드의 선언을 살펴봤습니다.
return 타입이 아주 현란한데요 메소드 정의를 보면 begin, end 메소드가 return 하는 것은 그냥
hexSource.begin();
입니다. 그럼 그냥 hexSource의 타입의 iterator를 타입으로 주면 안 될까? 그래서 해봤는데 되더라구요 엌코드도 함께 올려두겠습니다. UTF8 작성하시는 멘티님들도 참고하시면 좋을 것 같네요!
나중에 upstream master 브랜치에 적용시킬 때 begin, end 정의만 바꿔서 넣으시면 됩니다.
수정된 코드
수정 코드 테스트
원래 코드
Beta Was this translation helpful? Give feedback.
All reactions