linux x86_64 下編譯grpc總結

grpc庫的編譯需要依賴多個三方庫,官方建議通過./.gitmodules去獲取依賴庫,但我的linux環境是不能聯網的,必須離線安裝。

查看./.gitmodules文件,其實是去github把代碼拉取到gprc的thirdparty/對應的目錄下,具體如下

將編譯過程中缺少的三方庫在windows下載好,拷貝至對應的目錄即可

編譯過程中會報錯unrecognized command line option ‘-mfloat-abi=hard’,上網上搜索原因爲GCC版本高於4.8,而這行命令在新的GCC中已去掉了,我的當前版本爲4.8.5,然而我還是升級到了9.3.0,最後編譯成功;

另外我們公司使用的grpc版本爲1.22.1

我的服務端啓動後卡死,pstack查看具體原因,原來卡死在grpc_tracer_init()函數內,cpu佔用100%,查看grpc的issue發現這是一個已解決bug(當前最新爲1.27.0版本)但我們的gcc不支持編譯(當前grpc要求gcc版本最低爲4.8.9),因此只能按照此issue的方式修改grpc源碼,重新編譯,具體方式如下:

https://github.com/joda01/grpc/commit/3a54951b546424a930dafc50069297a47240f5f7

issue地址如下:

https://github.com/grpc/grpc/issues/21609

----------------------------------------------------------------------------------

以下內容引自https://www.jianshu.com/p/efc9167e7044

執行 make install 就會自動安裝上述編譯所生成的庫及二進制程序。這一步非常簡單,其實質只是把相應的文件拷貝的系統目錄而已。
想要知道具體會安裝哪些文件,查看 Makefile 即可。
安裝內容相當的複雜,實際上,我們沒有必要去了解每個細節,只要知道哪些主要文件會被安裝,以及他們會被安裝在哪個目錄就可以了。

我在這裏對整個安裝過程做了一個總結,如下:

(1)要安裝的文件
按照文件類型,我把要安裝或者說拷貝到系統目錄的文件主要有以下幾個部分:

    1. grcp 的相關頭文件
    1. 靜態庫,動態庫
    1. 可執行文件 (也即以 _plugin 結尾的各語言的 grpc 插件)

(2) 安裝至的目錄 (默認 /usr/local

如果沒有指定安裝目錄的 prefix,那麼默認的 prefix 是 /usr/local。如果想使用其他 prefix 比如 /usr,那麼可以編輯 Makefile 文件修改 prefix 變量。
或者 make install DISTDIR=/usr/local 。

It depends on the package. If the Makefile is generated by GNU autotools (./configure) you can usually set the target location like so:
./configure --prefix=/usr/local
If the Makefile is not generated by autotools, but distributed along with the software, simply open it up in an editor and change it. The install target directory is probably defined in a variable somewhere.

從上文可知,如果源碼包沒有提供 configure 配文件,最可靠的辦法就是編輯 Makefile 文件來指定 prefix。

按照不同的類型區別,它們分別將安裝在如下目錄

(1)頭文件
$prefix/include
注:源碼文件通常會在 $prefix/src 中,但通常沒有必要安裝源碼。

(2)靜態庫及動態庫 (.a 文件,.so,.so.x.x 文件)
對不同語言的支持,會有不同的靜態庫及動態庫文件。
$prefix/lib

(3) plugins,也就是二進制文件
$prefix/bin

(4) pkg-config 文件
$prefix/lib/pkg-config

(5)證書文件 certs
$prefix/share/grpc

比如,根證書文件爲:
$prefix/share/grpc/roots.pem

 

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