使用 libc 和 clang 編譯涉及 boost::program_options 的範例程式c 0x 模式會導致未定義的符號錯誤。但是,相同的程式碼可以使用 g -mp-4.7 或 clang 在沒有 libc 的情況下成功編譯和連結。
問題是由於 boost::program_options 的不相容性引起的,它是使用構建的libstdc 和 libc 。為了避免意外混合不相容的標準函式庫並確保二進位相容性,libc 採用了稱為「內聯命名空間」的 C 11 功能。這會更改 std::string 的應用程式二進位介面 (ABI),而不影響其應用程式介面 (API)。
要解決此相容性問題,請使用clang 和以下命令重建boost -stdlib=libc 標誌:
clang++ -stdlib=libc++
此操作將使用libc 重建boost,並避免因使用不相容的標準函式庫而產生的符號衝突。
以上是為什麼 c 0x 模式下的 libc 的 clang 無法連結這個 boost::program_options 範例?的詳細內容。更多資訊請關注PHP中文網其他相關文章!