error: ‘__ATOMIC_RELAXED’ undeclared (first use in this function)

編譯 dpdk-20.02 時,有如下報錯信息:

error: ‘__ATOMIC_RELAXED’ undeclared (first use in this function)
error: ‘__ATOMIC_ACQUIRE’ undeclared (first use in this function)
error: ‘__ATOMIC_RELAXED’ undeclared (first use in this function)
error: ‘__ATOMIC_ACQUIRE’ undeclared (first use in this function)

分析解決

頭文件的問題

根據過去的經驗,未聲明的符號這個錯誤很大概率是頭文件的問題。首先需要確定的是編譯的源碼中是否有相關的符號聲明。

使用上述符號在 dpdk-20.02 的源碼裏面搜索,只發現很多使用的地方,沒有發現聲明。

這意味着上面找不到的符號不是 dpdk 內部定義的符號,那麼這些符號可能是 dpdk 依賴的外部頭文件中聲明的。

內核頭文件是否聲明這些符號

考慮到 dpdk 編譯的時候需要指定內核源碼路徑,這些符號可能在內核頭文件中聲明。

使用上述符號在內核源碼中全局搜索,沒有找到。

在網上搜索

搜索了下,發現如下鏈接中有相同的問題案例:

__ATOMIC_RELAXED undeclared

瀏覽上述鏈接網頁,發現這個問題可能是 gcc 版本過低導致的。網頁中的討論中有下面這一句:

The atomic builtins referenced in atomic.nim are only available with GCC 4.7+

我檢查自己編譯環境下的 gcc 版本,發現使用的 gcc 爲 4.5.3 版本。

這之後我在另外一個編譯環境上重新編譯,編譯前確認 gcc 的版本高於 4.7,編譯成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章