2016-12-01 2 views
0

안녕하십니까. 각자 모두.(qt/임베디드) 프로그램을 실행하기 전에 라이브러리를로드하는 방법

qt 4.8을 사용하고 있습니다. (임베디드 리눅스) 서버 응용 프로그램이 qprocess()를 사용하여 클라이언트 응용 프로그램을 실행 중입니다. 이 시점에서 클라이언트 응용 프로그램은로드 속도가 느리기 때문에 사용자가 볼 때 시스템이 일시 중지 된 것처럼 보입니다.

느린 이유는 외부 라이브러리를 메모리에로드해야 할 때라고 생각합니다. 따라서 서버 응용 프로그램이 init 프로세스를 통과 할 때 클라이언트 응용 프로그램에서 사용할 라이브러리를 미리로드하는 방법이 있는지 궁금합니다.

더 좋은 방법이 있으면 알려주십시오. 고맙습니다.

+0

QLibraby를 사용하여 첫 번째 프로그램에서로드하려고 시도 할 수 있습니다. 이것이 최선의 방법인지 확실하지 않습니다. –

+0

@DragosPop QLibrary는 공유 라이브러리를 현재 프로세스에로드하므로 여기서는 도움이되지 않습니다. – MrEricSir

+0

알아, 도서관을 캐쉬로 만들면 도움이 될지도 모른다. 어쨌든 배터 솔루션을 찾았습니다. 내 대답을 보라. –

답변

1

다른 응용 프로그램은 시작할 때 자체 라이브러리를로드해야하기 때문에 쉬운 작업은 아니지만 원하는 응용 프로그램과 해당 라이브러리를 하드 디스크에서로드하는 대신 ramdisk에서로드하도록 준비하여 느린 로딩을 피할 수 있습니다 -디스크. 새로운 설정 기본 응용 프로그램에서

당신의 램 디스크를 가리 키도록을 통해

sudo mount -t tmpfs -o size=200M none /mnt/ramdisk 

사본 필요한 모든 파일을 마운트하고 환경으로 $LD_LIBRARY_PATH을 설정 사용하여 RAM 디스크를 만들 (Qt는)

auto env = QProcess::systemEnvironment(); 
env.insert("LD_LIBRARY_PATH","/mnt/ramdisk"); 

환경을 Q 프로세스를위한 환경으로 설정하십시오. 100 % 확신 할 수 없기 때문에 라이브러리가 거기에서로드 될 것입니다. 대안으로 chroot 환경을 만들고 chroot 환경의 /usr/lib에 라이브러리를 설치할 수 있습니다.

아이디어는 RAM에서 RAM으로로드 된 라이브러리 및 응용 프로그램을 RAM에로드하는 것으로 디스크에서로드하는 것보다 훨씬 빠릅니다.

+0

답변 해 주셔서 감사합니다. 나는 그것이 좋은 생각이라고 생각했다. 나는이 방법으로 시험을했다. Qt 앱 실행에 필요한 Qt 라이브러리를 램 디스크로 옮겼습니다. A 앱의 실행 속도가 크게 향상되었습니다. 그러나 A 앱에서 QProcess()를 사용하여 실행 한 B 앱의 실행 속도는 같습니다. – Taey

+0

오픈 파일 디스크립터에 대해 응용 프로그램을'strace '한다면, RAM 디스크가 아닌 디스크에서 라이브러리를로드하려고 여전히 응용 프로그램이 작동하는 것을 볼 수 있습니다. Linux의 공유 라이브러리 개념과 검색 및로드 우선 순위 경로가 그 것이다. 'ld.so.conf'를 확인하십시오. –