La busybox è disponibile nel modulo di libreria condivisa? Vorrei utilizzare le app individuali a livello di codice anziché utilizzare system()
. Ho sentito parlare di libbusybox e libbb ma non ho trovato alcuna documentazione.La busybox è disponibile nel modulo di libreria condivisa?
risposta
Se si dispone di un piccolo sistema incorporato in cui è importante, è possibile collegare la propria app nel file binario busybox, quindi è possibile chiamare le sue funzioni senza alcun linker dinamico.
In caso contrario, utilizzare system() o alcuni fork/exec combo.
È improbabile che tu voglia chiamare le utility così spesso che le prestazioni contano.
Esiste una libreria busybox in un modulo condiviso denominato libbusybox(.so)
, è sufficiente attivarlo durante la creazione di menuconfig. Una volta compilato, sarà disponibile nella cartella 0_lib
. In questa libreria hai una bella piccola funzione chiamata int lbb_main(char **argv)
.
Quello che dovete fare nel codice è qualcosa di simile:
extern int lbb_main(char **argv);
int main()
{
char* strarray[] = {"ifconfig",0};
lbb_main(strarray);
return 1;
}
Si potrebbe importare libb.h
, ma che non ha funzionato per me, perché ho avuto molti errori.
Dopo che devi compilare usando qualcosa come gcc -o code code.c -Lpath_to_0_lib_fodler -lbusybox
e il gioco è fatto!
Per intercettare l'output, è necessario ridefinire printf e chiamate simili, ma è chiaramente utilizzabile utilizzando le macro di soemthing come #define printf(...) code' in
libb.h '.
Si potrebbe persino generare la shell di busybox che non utilizza fork o sistema, ma che non funziona ancora bene.
Se '# include" libb.h "' causa "molti errori", c'è un problema serio da qualche parte. Sarebbe bello sapere di più a riguardo. Non dovresti assolutamente dover ridichiarare le funzioni della libreria da solo; ecco a cosa servono le intestazioni. –
- 1. HttpClient non disponibile Progetto Libreria condivisa Xamarin
- 2. Collisioni nome libreria condivisa
- 3. C++: dlclose non scarica la libreria condivisa
- 4. Libreria condivisa in Go?
- 5. come collegare la libreria condivisa con un'altra libreria condivisa in linux?
- 6. Il modulo Karma complains 'non è disponibile'
- 7. Collegamento delle dipendenze di una libreria condivisa
- 8. Protezione integrità libreria condivisa Android
- 9. Collegamento di una libreria condivisa utilizzando gcc
- 10. aggiungendo percorso di libreria condivisa per makefile
- 11. Come aggiungere la dipendenza .aar nel modulo libreria?
- 12. Libreria di memoria condivisa distribuita per C++?
- 13. Verifica se è disponibile un modulo node.js
- 14. È possibile creare una libreria condivisa con la libreria utilizzata per il collegamento statico?
- 15. Carica più copie di una libreria condivisa
- 16. Esecuzione di una libreria condivisa su Unix
- 17. Android apk di installazione utilizzando la riga di comando busybox
- 18. Estendi una libreria condivisa collegata dinamica?
- 19. scons costruisce sia la libreria statica che quella condivisa
- 20. Modifica libreria condivisa Linux (.so file) dopo la compilazione
- 21. Rilevare se JIT è disponibile
- 22. Percorso libreria condivisa come directory eseguibile
- 23. cygwin g ++ Il linker non trova la libreria condivisa
- 24. È una variabile globale in una libreria condivisa/dll, condivisa attraverso il processo
- 25. Cattura output di stampa dalla libreria condivisa chiamata da python con modulo ctypes
- 26. come forzare il linker ad usare la libreria condivisa invece della libreria statica?
- 27. Collega una libreria statica a una condivisa durante la compilazione?
- 28. link libreria condivisa in Android NDK
- 29. HttpContext non disponibile nella libreria di classi
- 30. Apache Directory Studio “Impossibile caricare la libreria condivisa JNI”
Non utilizzare il sistema(). execve() e gli amici hanno meno probabilità di fare la cosa sbagliata. –