Piszę bibliotekę statyczną wielokrotnego użytku dla iPhone'a, postępując zgodnie z instrukcjami podanymi pod numerem here.Nie wolno ujawniać symboli z używanej biblioteki we własnej bibliotece statycznej.
Chcę używać w bibliotece wewnętrznej biblioteki minizip
, ale nie chcę ujawniać jej użytkownikowi.
Użytkownik powinien mieć możliwość dołączenia minizipu, ewentualnie innej wersji, i nie powodować konfliktów z moją "wewnętrzną" wersją minizipu.
Czy to możliwe?
Edit:
Próbowałem dodanie -fvisibility=hidden
dodatkowych flag kompilatora dla plików minizip i zmianę funkcji będzie __private_extern__
i __attribute__((visibility("hidden")))
, ale wciąż wydaje się produkować określone symbole zewnętrzne:
00000918 T _unzOpen
0000058e T _unzOpen2
00001d06 T _unzOpenCurrentFile
00001d6b T _unzOpenCurrentFile2
...
Edytuj nr 2:
Podobno symbole oznaczone tymi notacje są prywatne tylko przez linker, co nigdy nie zdarza się, gdy Xcode tworzy źródła, ponieważ dodaje parametr -c ("Kompiluj lub montuj pliki źródłowe, ale nie łącz")
Czy jesteś w stanie/chcesz zmodyfikować swoją wewnętrzną kopię minizipu i czy iPhone obsługuje dwupoziomowy obszar nazw Mach-O? Oczekuję, że odpowiedź na oba pytania będzie twierdząca. – ephemient
Jestem skłonny zmodyfikować moją kopię, jasne. Może mógłbym po prostu mieć wszystkie symbole z prefiksem, którego używam do mojej biblioteki?Nie miałbym nic przeciwko wykonaniu my_. Nie wiem, czy dwupoziomowe przestrzenie nazw symboli są obsługiwane w telefonie iPhone. –
Tylko dla przyszłego Googlera, może chcesz to zobaczyć, może to być pomocne: http://stackoverflow.com/a/14863432/311567 – dashesy