![애플리케이션이 시작될 때 "libFoo.so" open()을 여러 번 호출하는 것을 방지하는 방법은 무엇입니까? [폐쇄]](https://linux55.com/image/144297/%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98%EC%9D%B4%20%EC%8B%9C%EC%9E%91%EB%90%A0%20%EB%95%8C%20%22libFoo.so%22%20open()%EC%9D%84%20%EC%97%AC%EB%9F%AC%20%EB%B2%88%20%ED%98%B8%EC%B6%9C%ED%95%98%EB%8A%94%20%EA%B2%83%EC%9D%84%20%EB%B0%A9%EC%A7%80%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
다음 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초도 안 되는 시간을 낭비하는 것 같습니다!