2013-06-24 9 views
6

Mam symbol, do którego odwołuję się w dynamicznej bibliotece Xcode, ale nie jest tam zdefiniowany. POTRZEBUJĘ tego symbolu, by być niezdefiniowanym. Dzieje się tak dlatego, że będzie on inaczej kompilowany w każdym procesie, który go zawiera (na podstawie niektórych definicji czasu kompilacji).Ignorowanie niezdefiniowanego symbolu w bibliotece dynamicznej z Xcode

Dynamiczny cel biblioteki w Xcode, który nie łączy się, ponieważ zawiera odniesienie do tego symbolu (co nie jest nieoczekiwane), ale wiem, że symbol będzie dostępny w czasie wykonywania. Będę kompilował tę funkcję do każdego celu, do którego jest podłączona wspólna biblioteka.

Próbuję uzyskać linker, aby zaznaczyć ten symbol dla dynamicznego wyszukiwania w czasie wykonywania.

Udało mi się go połączyć, jeśli określę "nieokreślony dynamiczny widok" jako jedną z "innych flag łącznika" w moim projekcie Xcode. Problem polega na tym, że nie chcę posunąć się tak daleko. Wiem, że tylko jeden symbol ma być niezdefiniowany. Chcę, aby cała reszta symboli generowała błędy, jeśli są pozostawione jako niezdefiniowane (chcę w zasadzie uniknąć błędu braku symbolu w czasie wykonywania).

znalazłem opcję linker ld, że wydaje się, że powinien zrobić to, czego potrzebuję (od strony man ld):

-U symbol_name 
      Specified that it is ok for symbol_name to have no definition. With -two_levelnamespace, the resulting symbol will be marked dynamic_lookup which means dyld will search all loaded images. 

Jednak nie wydaje się uzyskać go do pracy. Ilekroć określenie „-U symbolName” lub „-UsymbolName” w „Innych Flagi łącznik” Nadal jestem witany z tego błędu łącznikowej:

Undefined symbols for architecture x86_64: 
    "_symbolName", referenced from: <various object files> 

używam -U nieprawidłowo może? Czy naprawdę nie jest to opcja, której potrzebuję, czy też po prostu nie działa tak jak powinna?

+0

Czy nie '--unresolved-symbole = ignore-all' pracy dla Ciebie? – devnull

+1

@devnull Nie próbowałem tego, ale otrzymałem równoważne zachowanie (ignorując wszystkie rozwiązane symbole) z "-undefined dynamic_lookup". Problem polega na tym, że nie chcę ignorować wszystkich nieokreślonych symboli. Chcę tylko zignorować. Nie chcę zignorować wszystkich, aby zignorować tę. –

+0

Mogę się mylić, ale czy nie powinieneś określać '-U _symbolName'? –

Odpowiedz

Powiązane problemy