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:

  1. libphonenumber , który najwyraźniej powoduje 4 z 5 ostrzeżeń. Opracowany przez nas za pośrednictwem "cmake".
  2. boost (libboost_thread-mt), odpowiedzialny za 1 Ostrzeżenie. Opracowano na podstawie materiału źródłowego. MacPorts.
  3. ICU (libicudata, libicuuc, libicui18n), skompilowany z MacPorts.
  4. bufory protokołu , skompilowane przez "./ configure & & make".

Uwaga:

  1. Aplikacja działa doskonale pomimo ostrzeżeń, ale chcielibyśmy się ich pozbyć, ponieważ są denerwujące.
  2. 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".
Author: Community, 2012-03-27

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ć.

 23
Author: inspector-g,
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"))).

 7
Author: johnwbyrd,
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++.

 4
Author: guest2016,
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.

 2
Author: Nick,
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