애플리케이션이 시작될 때 "libFoo.so" open()을 여러 번 호출하는 것을 방지하는 방법은 무엇입니까? [폐쇄]

애플리케이션이 시작될 때 "libFoo.so" open()을 여러 번 호출하는 것을 방지하는 방법은 무엇입니까? [폐쇄]

다음 so 파일이 있습니다/UNI/System/Libs/libmbedcrypto.so.3목차. 내 응용 프로그램을 시작할 때 다음을 사용합니다.libmbedcrypto.so.3그리고스트레스이해합니다:

open("/UNI/System/Libs/tls/v7l/neon/vfp/libmbedcrypto.so.3", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/UNI/System/Libs/tls/v7l/neon/vfp", 0x7ef80610) = -1 ENOENT (No such file or directory)
open("/UNI/System/Libs/tls/v7l/neon/libmbedcrypto.so.3", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/UNI/System/Libs/tls/v7l/neon", 0x7ef80610) = -1 ENOENT (No such file or directory)
open("/UNI/System/Libs/tls/v7l/vfp/libmbedcrypto.so.3", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/UNI/System/Libs/tls/v7l/vfp", 0x7ef80610) = -1 ENOENT (No such file or directory)
open("/UNI/System/Libs/tls/v7l/libmbedcrypto.so.3", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)

//...   more stat64 & open

open("/UNI/System/Libs/libmbedcrypto.so.3", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat64("/UNI/System/Libs", {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0 

모든 공개 및 stat64 호출을 제거하는 방법은 무엇입니까?

답변1

이것은 정상입니다.어셈블리에서 처음부터 프로그램을 다시 작성하거나 이를 사용하기 위해 자체 C 라이브러리를 작성하지 않고는 이 문제를 제거할 수 있는 방법이 없습니다. 이것은 거의 모든 프로그램의 표준입니다. 진지하게, 이렇게 중요하지 않은 것을 최적화할 필요는 없습니다. 존재하지 않는 파일에 액세스하려고 시도하는 데 낭비되는 시간은 무시할 수 있습니다. 아래 시스템 호출 추적에서 볼 수 있듯이 true프로그램은 임베디드 시스템에서 0만 반환하도록 설계되었습니다.

root@UP-1044:~# strace -T -e trace=open true
open("/tmp/t/usr/lib/libgcc_s.so.1", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000643>
open("/tmp/t/lib/libgcc_s.so.1", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = -1 ENOENT (No such file or directory) <0.000861>
open("/lib/libgcc_s.so.1", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3 <0.000208>
+++ exited with 0 +++

각 시스템 호출은 1000분의 1초도 안 되는 시간을 낭비하는 것 같습니다!

관련 정보