Czy istnieje prosty i skuteczny sposób, aby wiedzieć, że dany dynamicznie połączony ELF
brakuje wymaganego .so do uruchomienia, wszystko z wewnątrz Program C/C++?linux/gcc: funkcjonalność ldd z poziomu programu C/C++
Potrzebuję program o nieco podobnej funkcjonalności jak ldd
, bez próby wykonania ELF
, aby znaleźć zależności (met/unmet) w systemie. Być może zadając narzędzie ld-linux.so przez jakąś bibliotekę? (Jestem nowicjuszem w tej części linux =)
UWAGA: odczyt kodu źródłowego
ldd
nie był bardzo pomocny w moich intencjach: wydaje się, że w rzeczywistości jestldd
forking inny proces i realizacji programu.
Jeśli to nie jest możliwe, aby wiedzieć, że program ma niespełnione zależności bez wykonywania go, czy jest jakiś sposób, aby przynajmniej szybko podać wykaz .so to wymagane dla tego ELF
wszystko od wewnątrz mojego programu?
góry dzięki =)
Czy masz dobry powód, dla którego nie wystarczy wywołać narzędzia ldd i przeanalizować jego wyjście? Pod Linuksem taka technika jest szeroko stosowana. – Juraj
Wolałbym nie wywoływać powłoki, aby wykonać cokolwiek innego niż mój własny program. Poza tym nie jest zbyt wydajne rozwidlanie, uruchamianie powłoki, itp. Tylko po to, aby wypróbować, czy plik wykonywalny będzie działał próbnie i błędnie ... ale tak , Podejrzewam, że wywoływanie ldd jest dobrym standardowym wyborem. – conejoroy
Przepraszam, to jest mit. Widelec wcale nie jest drogi, a większość wywołań exec *() nie używa powłoki do uruchomienia binarnego. Jest możliwe, że zabijesz więcej czasu, nurkując w wewnętrznych partiach LD-Linuksa w porównaniu do nakładki fork()/exec() dla wszystkich przyszłych wywołań razem. – Juraj