アプリケーションの起動時に "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秒未満の時間を無駄にするようです!

おすすめ記事