C++로 작성된 고성능 시스템에서 작업하고 있습니다. 프로세스는이 응용 프로그램 용으로 개발 된 간단한 언어로 작성된 런타임의 복잡한 논리 (규칙)를 이해할 수 있어야합니다.C++의 임베디드 LLVM에서 이진 코드 (공유 라이브러리) 생성
에 논리를 컴파일 임베디드 인터프리터를 실행하고 데이터에 대한 동적 기능 해석 논리를 기반으로 데이터를 수신 전화, 작품을 생성 -
는 논리를 해석 : 우리는 두 가지 옵션이 있습니다 plugin.so 동적 공유 파일은 훨씬 빠르게 임베디드보다 실행하는 것,
옵션 2는 기계 코드를 최적화 할 것 같은 정말 매력적인 것 같아요 플러그인을로드하고 런타임에 논리 함수를 호출, dlsym에를 dlopen을 사용 통역 인 t 그는 처리한다. 내가 탐구하고
옵션은 다음과 같습니다
- 이 컴파일 방법 문자열을 컴파일 (문자열 로직, 목록 & 오류 목록 & 경고) 여기
- 입력 로직이 문자열이 포함 로직 쓰기 사용자 정의 언어로 코딩 됨
- llvm ir를 생성하고 컴파일 메소드의 반환 값은 다음을 반환합니다.
- 링크 방법 쓰기 bool 링크 (문자열 ir, 문자열 파일 이름, 목록 & 오류, 목록 & 경고)
- 링크 방법은 내가 llvm 설명서를 검색하지만 나는 그런 가능성을 쓸 수 있는지 알아낼 수 없었습니다. 방법
내가 맞으면 LLVM IR은 LLVM 바이트 코드 또는 어셈블리 코드로 변환됩니다. 그런 다음 LLVM JIT를 사용하여 JIT 모드로 실행하거나 GNU Assembler를 사용하여 원시 코드를 생성합니다.
LLVM에서 해당 기능을 찾을 수 있습니까? C++의 시스템 명령을 사용하여 "as"를 호출하여 내 요구 사항에 맞는 plugin.so 파일을 생성하는 것이 아니라 코드 내에서 모두 수행하는 것이 훨씬 더 좋을 것입니다.
런타임시 내 프로세스에서 공유 라이브러리 원시 이진 코드를 생성 할 수있는 방법을 알고 있다면 알려주십시오.
저는이 문제에 대해서는 전문가가 아니지만 http://llvm.org/docs/tutorial/LangImpl4 일 수 있습니다.html # add-a-jit-compiler 도움이됩니다. – godfatherofpolka
링크를 이용해 주셔서 감사합니다. 예, 임베디드 jit이 또 다른 옵션이라고 생각합니다. JIT 코드에서 C++ 인터페이스를 구현하고 JIT에서 파생 클래스 구현에 대한 포인터를 호출 C++ 응용 프로그램에 반환 할 수 있는지 궁금합니다. – Sanjit
AngelScript 나 Lua (더 구체적으로 LuaJit)와 같은 스크립팅 언어가 사용자의 목적에 충분히 빠르지 않다면 OpenCL을 살펴 보는 것이 좋습니다. 런타임시 C/C++로 작성된 전산 코드를 컴파일 할 수 있습니다. C 전처리기를 사용하여 전산 커널을 쉽게 구성 할 수 있습니다. 대부분의 OpenCL 컴파일러는 LLVM을 내부적으로 사용하기 때문에 기술적 세부 사항이 많지 않으면 서 전체 기능을 사용할 수 있습니다. 최종 보너스로 GPU에서 코드를 쉽게 실행하려고 할 수 있지만 원하는 경우 CPU를 제한 할 수 있습니다. – stgatilov