2012-08-14 17 views
5

Podczas dynamicznego łączenia pojawiają się dziwne niezdefiniowane odwołania do funkcji. Znam nazwę biblioteki, która powinna zawierać tę funkcję. Czy jest jakieś polecenie linuksa, aby upewnić się, że funkcja już istnieje w bibliotece (plik .a)?Sprawdzanie istnienia funkcji w bibliotece w Linuksie

+2

Wypróbuj 'nm ', jeśli twój symbol poprzedzony jest 't' lub' T' lib ma to. – Rohan

+0

[autoconf] (http://www.gnu.org/software/autoconf/) robi to podczas sprawdzania dostępności biblioteki za pomocą ['AC_CHECK_LIB'] (http://www.gnu.org/software/autoconf/manual /autoconf.html#Libraries). –

Odpowiedz

9

powinieneś być w stanie korzystać nm (może wymagać parametr --demangle), aby uzyskać listę wszystkiego, co się wewnątrz biblioteki , następnie użyj grep do filtrowania wyników, np poszukaj \d T functionname\( lub coś w tym stylu.

+0

Biblioteka ma nazwę funkcji z prefiksem T. Ale nazwa funkcji nie jest dokładnie tym, czego się spodziewam. nm znajduje: '0000000000000310 T _Z15lmp_init_deviceiiiiidii' podczas gdy szukam lmp_init_device. Czy przedrostek/sufiks byłby ignorowany podczas łączenia? – ahmad

+1

Dodaj '--demangle' i powinno usunąć dodane znaki (spowodowane tym, że jest to C++ zamiast zwykłego C). – Mario

1

Wystarczy popatrzeć na komendzie nm które powinny dać kawałek informacji szukasz

Powiązane problemy