Dziwne ostrzeżenia od linkera (ld) [duplikat]
To pytanie ma już odpowiedź tutaj:
Budujemy aplikację Mac OSX, która jest napisana głównie w Obj-C / Cocoa. Aplikacja następnie statycznie łączy się z niektórymi bibliotekami innych firm, napisanymi w C / C++ i skompilowanymi przez nas (w wierszu poleceń, używając albo MacPorts or the usual "./ configure & & make"; wszystkie są uniwersalnymi binariami).
Aplikacja działa idealnie, ale w czasie kompilacji Zawsze dostajemy te dziwne Ostrzeżenia linkera:
ld: warning: direct access in ___cxx_global_var_init17 to global weak symbol __ZGVN4i18n12phonenumbers9SingletonINS0_15PhoneNumberUtilEE8instanceE means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in ___cxx_global_var_init17 to global weak symbol __ZGVN4i18n12phonenumbers9SingletonINS0_15PhoneNumberUtilEE8instanceE means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in ___cxx_global_var_init17 to global weak symbol __ZN5boost10scoped_ptrIN4i18n12phonenumbers15PhoneNumberUtilEED1Ev means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in ___cxx_global_var_init17 to global weak symbol __ZN4i18n12phonenumbers9SingletonINS0_15PhoneNumberUtilEE8instanceE means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
ld: warning: direct access in ___cxx_global_var_init17 to global weak symbol __ZGVN4i18n12phonenumbers9SingletonINS0_15PhoneNumberUtilEE8instanceE means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
Pochodzi z biblioteki C / C++. Linkujemy z tymi libami:
- libphonenumber , który najwyraźniej powoduje 4 z 5 ostrzeżeń. Opracowany przez nas za pośrednictwem "cmake".
- boost (libboost_thread-mt), odpowiedzialny za 1 Ostrzeżenie. Opracowano na podstawie materiału źródłowego. MacPorts.
- ICU (libicudata, libicuuc, libicui18n), skompilowany z MacPorts.
- bufory protokołu , skompilowane przez "./ configure & & make".
Uwaga:
- Aplikacja działa doskonale pomimo ostrzeżeń, ale chcielibyśmy się ich pozbyć, ponieważ są denerwujące.
- rozwiązanie zaproponowane przez xcode z ostrzeżeniem boost : linker(Id) o ustawieniach widoczności nie działa: "Symbole Ukryte domyślnie" zawsze były "Tak".
4 answers
Rozwiązanie zaproponowane przez xcode z boost : linker (Id) ostrzeżenie o Ustawienia widoczności nie działają: "Symbole Ukryte domyślnie" mają zawsze było "tak".
Ma to mniej wspólnego z ustawieniem na "tak", a Więcej z ustawieniem na tę samą wartość we wszystkich projektach. Biblioteki / projekty, które zależą od innych bibliotek, muszą mieć podobne ustawienie dla "Symbole Ukryte domyślnie", aby połączyć się poprawnie i wolne od błędów / ostrzeżeń.
Wpadłem na to przed, i prosta zmiana w Xcode dla wszystkich projektów, aby zapewnić dopasowanie ustawień zazwyczaj rozwiązuje problem. Ponieważ wygląda na to, że kompilujesz również w wierszu poleceń, argument -fvisibility
do gcc
jest tym, na co musisz spojrzeć.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-31 08:16:57
TL: DR; używaj -fvisibility=hidden
jako przełącznika kompilatora GCC i llvm we wszystkim, co kompilujesz, łącznie z zależnymi bibliotekami, chyba że masz powód, by tego nie robić.
Dobre wprowadzenie do fvisibility i-fvisibility-inline-hidden Compilation FLAG jest dostępne na stronie internetowej Apple, w chwili pisania tego tekstu. Artykuł zawiera również pewne szczegóły dotyczące deklaracji __attribute__((visibility("hidden")))
i __attribute__((visibility("default")))
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-19 00:54:11
Dostałem ostrzeżenie w Xcode wstawiając -fvisibility=hidden -fvisibility-inlines-hidden
do innych FLAG C++.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-23 21:10:04
Też to dostałem, z podobnych powodów, ale myślę, że problemem była niespójność ustawień widoczności inlining.
Zobacz http://lists.cs.uiuc.edu/pipermail/llvmdev/2011-December/046505.html
Ustawiłem all inlining hidden na no i ostrzeżenie (w końcu) zniknęło.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-31 12:38:16