背景:
嘗試在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 的內聯命名空間功能來修改ABI(應用程式二進位介面) std::string 同時保持相同的API(應用程式介面)。這可確保連結器可以區分來自 libstdc 的 std::string 和來自 libc 的 std::string 。
以上是為什麼在 C 0x 模式下使用 libc 的 Clang 無法連結 Boost::program_options 範例?的詳細內容。更多資訊請關注PHP中文網其他相關文章!