clang을 라이브러리로 사용하여 다른 답변에서 설명한대로 JIT 컴파일을 구현할 수 있습니다. 그런 다음 컴파일 된 모듈 (예 : .so 라이브러리)을로드해야합니다.
이 작업을 수행하려면 표준 dlopen (unix) 또는 LoadLibrary (windows)를 사용하여로드 한 다음 dlsym (unix)을 사용하여 컴파일 된 함수를 동적으로 참조하고 "스크립트"main() 그의 이름은 알려져있다. C++의 경우 맹 글링 된 기호를 사용해야합니다. 휴대 가능한 대안은 예를 들어. GNU의 libltdl.
대안으로 "스크립트"는 모듈 초기화 함수를 구현하거나 정적 코드를 두어로드시 자동으로 실행될 수 있습니다 (C++ 전역 적으로 정의 된 객체의 생성자가 즉시 호출됩니다).
로드 된 모듈은 주 응용 프로그램의 모든 항목을 직접 호출 할 수 있습니다. 물론 심볼은 적절한 메인 어플리케이션의 헤더 파일을 사용하여 컴파일 타임에 알려집니다.
프로그램에 C++ "plugins"을 쉽게 추가하고 구성 요소 인터페이스를 이전에 알기를 원하면 (메인 응용 프로그램이 모듈이 메모리에로드되기 전에 .h에서로드 된 클래스의 이름과 인터페이스를 알고 있다고 가정하십시오.), 라이브러리를 동적으로로드 한 후에 클래스는 정적으로 링크 된 것처럼 사용할 수 있습니다. 모듈을 dlopen()하기 전에 클래스의 객체를 인스턴스화하지 않도록하십시오.
정적 코드를 사용하면 멋진 자동 플러그인 등록 메커니즘을 구현할 수 있습니다.
감사합니다. 실행 및 실행을 위해 꽤 오래 걸렸습니다. 기본적으로 실행 파일을 찾지 못했기 때문입니다. 지금 살펴보면 절반 정도라고 말하고 싶습니다. 이제 지렛대가 아닌 부분에 정의 된 함수를 호출하는 방법을 알아야합니다. 그게 어떤 생각이야? – FFox
무슨 뜻인지 모르겠다. 컴파일 한 함수에 대한 포인터를 얻을 수 있어야합니다. 어쩌면이 일반적인 LLVM 튜토리얼이 도움이 될 것입니다 : http://llvm.org/docs/tutorial/ (특히 4 장). 나는이 인터프리터를 그대로 사용할 수있을 것이라고 기대하지는 않지만, C/C++ 인터프리터를 응용 프로그램에 임베드하는 방법에 대한 아이디어를 제공해야합니다. (나는 그것을 직접 사용해 본적이 없으며 방금 그것을 본 것을 기억했다.) –
좋아, 내가 한 일은 다음과 같다. http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-July/009836.html ... 실제로 cfe-dev 메일 링리스트의 멋진 사람들의 도움을 받아 작업했습니다. 왜이 통역사를 앱에서 사용할 수 없다고 생각하십니까? – FFox