隻要通過CMake編譯C或C++代碼,不管是在Windows、Linux、Mac上還是進行交叉編譯,配置不當時,就有可能出現” is not able to compile a simple test program”問題。
CMake在編譯你的C或C++代碼前,會先驗證你指定的編譯器是否可以正常工作。CMake會先自動生成一個非常簡單的testCCompiler.c或testCXXCompiler.cxx檔案,它會嘗試使用CMake認為的”standard”編譯器選項來編譯此檔案,若是非交叉編譯,可能還會嘗試執行該可執行檔案,以檢視編譯器是否正常工作。
” is not able to compile a simple test program”問題的可能原因:
(1).Linux上有多個gcc/g++版本,編譯時未按你預期的gcc/g++版本進行編譯;
(2).Linux版本低;
(3).系統找不到指定的檔案,如動态庫。
下圖是我在Ubuntu 16.04上執行交叉編譯時遇到的類似問題:

通過ldd指令檢視可執行檔案或動态庫依賴哪些動态庫,這裡檢視aarch64-linux-gnu/bin/ld可執行檔案依賴哪些動态庫,如下圖所示:它依賴/lib/x86_64-linux-gnu/libc.so.6動态庫,但是沒有找到”GLIBC_2.27”,即沒有找到glibc 2.27版本。
通過strings指令檢視/lib/x86_64-linux-gnu/libc.so.6支援哪些版本,如下圖所示:在Ubuntu 16.04上glibc隻支援到2.23版本,不支援2.27版本。
解決方法一個是在Ubuntu 16.04上更新glibc到2.27,比較麻煩;另一個簡單的方法是使用Ubuntu 18.04重新編譯此工程,經測試,将工程拷貝到Ubuntu 18.04上直接編譯一切順利。