2010-04-25 14 views
6

Podczas debugowania błędu łącza (undefined reference to _dso_handle) za pomocą łańcucha narzędzi Android x86 zauważyłem, że jest statycznie łączący crtbegin_dynamic.o. Jaki jest cel tego pliku? Istnieje inny podobny crtbegin.o w katalogu instalacyjnym toolchain, który zawiera brakujący symbol (_dso_handle). Jaka jest różnica między crtbegin.o a crtbegin_dynamic.o?Co to jest crtbegin.o i crtbegin_dynamic.o?

+0

Logicor dostarczył tę odpowiedź. Zamierzam odtworzyć to jako komentarz, ponieważ prawdopodobnie odejdzie: * "Oto bardziej szczegółowe wyjaśnienie na ten temat: https://gcc.gnu.org/onlinedocs/gccint/Initialization.html"*. – jww

+0

Powiązane: [Różnica między odmianami crtbegin.o?] (Http://stackoverflow.com/q/22160888/608639). To nie wygląda na dupę (w przeciwnym razie oddałbym pierwszy głos na moje pytanie). – jww

Odpowiedz

-5

Myślę, że odnoszą się one do bibliotek dynamicznych (obiektów wspólnych) i plików wykonywalnych, ale nie do końca pewne. Mam nadzieję, że da ci to szansę.

10

C++ ma globalne konstruktory i destruktory. crtbegin.o i crtend.o zajmują się wywoływaniem tych konstruktorów i destruktorów. Warianty crtbegin.o takie jak crtbeginS.o robią to samo dla innych typów plików wykonywalnych, takich jak statyczne pliki wykonywalne i biblioteki współdzielone.