2014-09-22 3 views
1

클링 (cling)은 학습을 목적으로 대형 라이브러리의 API를 사용하는 좋은 방법입니다. 안타깝게도이 작업을 시작하는 방법에 대한 설명서 또는 자습서가 없습니다. 필자는 누락 된 심볼을 계속 실행하고 포기할 때까지 C++ filt와 rgrep을 반복적으로 사용하여로드 할 라이브러리 또는 헤더를 찾아야했습니다.CLPL을 사용하여 REPL에서 대형 C++ 라이브러리를 조정하는 방법?

소스에서 전체 라이브러리를 JIT하는 올바른 전략입니까, 아니면 미리 빌드 된 라이브러리에 링크해야합니까?

답변

2

헤더와 라이브러리를 연결하는 한 가지 방법은 자동 로드맵 (http://cling.web.cern.ch/cling/doxygen/classcling_1_1Interpreter.html#ad56b40974d204f85e9fc0a9fa9af1660)을 생성하는 것입니다. 빌드시에 그것을 생성하고 정적 초기화 중에 라이브러리에 후크를 추가 할 수 있습니다. 따라서 사용자는 다음을 수행합니다. .L myLib 차례로 헤더 포함이 트리거됩니다. 다른 방법은 조금 더 까다 롭습니다. 살펴보기 https://github.com/vgvassilev/cling/tree/master/test/Autoloading

도움이되기를 바랍니다.

+0

감사합니다! 나는 다른 누군가의 라이브러리를 대화식으로 조작하는 방법을 찾고 있었다. 어떤 종류의 빌드에 계측을 추가하는 것은 아마 과잉입니다. 존재한다면 코드와 API 문서로 시간을 보내는 것이 더 나을 것입니다. –

+0

불행히도 이것은 또한 C++의 문제입니다. 맞습니까? 응용 프로그램에서 헤더 파일을 사용하는 경우 링크 할 때이 헤더 파일과 연관된 라이브러리를 지정해야합니다. 주위에 쉬운 길은 없습니다. 도움이 될 수있는 기능 (구현되지 않음)은 포함 경로의 모든 라이브러리를 검색하여 nm을 수행하고 무차별하게 기호를 찾을 수 있습니다. 문제는 심볼이 둘 이상의 라이브러리에서 발견 될 수 있다는 것입니다. – vvassilev

+0

제 경우에는 오픈 소스 라이브러리 였기 때문에 소스와 함께 컴파일 된 라이브러리 및 해당 라이브러리와 연결된 예제 프로그램이있었습니다. 아마도이 유스 케이스를 지원하기 위해 현재 디렉토리 아래에 모든 헤더와 컴파일 된 라이브러리 (또는 더 의미가있는 경우 소스 파일)를 자동으로로드 할 수있을 것입니다. –

0

매우 늦은 답변에 사과드립니다. 사전 빌드 된 라이브러리를 링크해야합니다!

$ echo 'extern "C" const char* zlibVersion(); 
zlibVersion()' | cling -lz 

또는 대화 형 .L lib을 사용합니다 :

당신은 집착에 동적 라이브러리를로드 -l 플래그를 사용할 수있는 응답을

[cling]$ .L libz 
[cling]$ #include <zlib.h> 
[cling]$ zlibVersion() 
(const char * const) "1.2.3.4"