首頁  >  文章  >  後端開發  >  為什麼 c 0x 模式下的 libc 的 clang 無法連結這個 boost::program_options 範例?

為什麼 c 0x 模式下的 libc 的 clang 無法連結這個 boost::program_options 範例?

Patricia Arquette
Patricia Arquette原創
2024-11-03 13:43:30306瀏覽

Why does clang with libc   in c  0x mode fail to link this boost::program_options example?

為什麼 c 0x 模式下的 clang 與 libc 不連結這個 boost::program_options 範例?

使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn