背景:
嘗試在C 0x 模式下使用Clang 和libc 編譯和連結Boost::program_options 範例時,出現以下錯誤:
Undefined symbols for architecture x86_64: // Various undefined symbols related to Boost::program_options
解釋:
此錯誤的主要原因是libc 與GCC 的libstdc 不二進位相容。具體來說:
解決方案:
要解決此問題,您必須使用Clang 以libc 作為標準庫重建Boost:
clang++ -stdlib=libc++ ...
二進制的原因不兼容性:
為了防止由於二進位不相容而導致意外混合和運行時崩潰,libc 利用C 11 的內聯命名空間功能來修改std::string 的ABI(應用程式二進位介面),同時保持相同的API (應用程式編程接口)。這可確保連結器可以區分來自 libstdc 的 std::string 和來自 libc 的 std::string 。
以上是為什麼在 C 0x 模式下使用 libc 的 Clang 無法連結 Boost::program_options 範例?的詳細內容。更多資訊請關注PHP中文網其他相關文章!