Como evitar múltiplas chamadas 'libFoo.so' open () no início do aplicativo? [fechadas]

0

Eu tenho o seguinte arquivo no diretório /UNI/System/Libs/libmbedcrypto.so.3 . Quando eu lanço minha aplicação, que usa libmbedcrypto.so.3 com strace eu vejo :

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 

Como faço para me livrar de todo o & aberto chamadas stat64?

    
por Noam M 21.11.2018 / 06:01

1 resposta

1

Isso é normal. Na verdade, você não pode se livrar disso sem reescrever o programa desde o início na montagem, ou escrevendo sua própria biblioteca C para usá-lo. Isso tudo é padrão para praticamente qualquer programa. Sério, você não precisa otimizar algo tão inconseqüente quanto isso. A quantidade de tempo desperdiçada ao tentar acessar arquivos inexistentes é insignificante, como você pode ver no rastreamento syscall abaixo de true , um programa projetado apenas para retornar 0, a partir de um sistema incorporado:

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 +++

A quantidade de tempo desperdiçada em cada um desses syscalls parece ser menor do que um único milissegundo!

    
por 21.11.2018 / 08:19

Tags