我们正在构建一个Mac OSX应用程序,它主要是用Obj-C/Cocoa编写的。
然后该应用程序会静态链接一些第三方库,这些库是用C/C++编写的,并由我们编译(在命令行上,使用MacPorts或通常的"./configure && make";所有都是通用二进制文件)。
该应用程序运行得非常完美,但在编译时我们总是会收到这些奇怪的链接器警告:
该应用程序运行得非常完美,但在编译时我们总是会收到这些奇怪的链接器警告:
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.
这是来自于一个C/C++库。我们正在链接以下这些库:
- libphonenumber,它似乎引起了其中4个警告。通过“cmake”由我们编译。
- boost(libboost_thread-mt),负责其中1个警告。通过MacPorts编译。
- ICU(libicudata、libicuuc、libicui18n),通过MacPorts编译。
- Protocol Buffers,通过“./configure && make”编译。
请注意:
- 尽管有警告,但应用程序仍然可以正常工作,但我们希望摆脱这些烦人的警告。
- xcode with boost : linker(Id) Warning about visibility settings提出的解决方案不起作用:“默认情况下隐藏符号”始终为“是”。
-DUSE_RE2=1
来使用"re2"正则表达式库而不是完整的ICU库,从而使libphonenumber更小。 - Matt Connolly