編譯openssl時出現的「error: expected identifier or ‘(‘ before ‘.‘ token「問題

2020-08-10 12:11:16

在編譯openssl-1.0.1p時,出現以下錯誤:

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

In file included from ../e_os.h:62:0,
                 from cryptlib.h:65,
                 from cryptlib.c:117:
../include/openssl/opensslconf.h:1:1: error: expected identifier or '(' before '.' token
 ../../crypto/opensslconf.h
……

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

當然錯誤不止這一處,還有很多類似的錯誤。

以此錯誤爲例,查詢問題以及解決方法。

找到../include/openssl/opensslconf.h,可以看到只有一行程式碼:

../../crypto/opensslconf.h

爲什麼只有這樣一句完全不符合c語言的規範程式?

https://www.openssl.org/source/old/1.0.1/下載openssl-1.0.1p.tar.gz,解壓後看一下原始的原始碼工程中這個檔案的內容。發現有很200多行,爲什麼這裏只有1行,而且不符合c規範呢?

實際上此處這個檔案是軟鏈接檔案,指向了../../crypto/opensslconf.h。其他錯誤也都是這個原因。

因爲筆者進行編譯的原始碼工程不是.tar.gz也不是zip格式,而是未經壓縮的資料夾形式的原始碼,因此linux下的軟鏈接,到了windows下就被翻譯成瞭如上所示的一行程式碼的形式,這樣在編譯時就會出現上述錯誤了。需要以壓縮檔案的形式,最好是.tar.gz格式的原始碼,直接在linux下解壓,之後編譯,這樣就不會產生上述錯誤了。