October 2020 Archives

关于运行库和开发库区别

很多初级开发者刚刚进行linux系统编程开发,不清楚运行库和开发库区别,这里特别说明一下:

  • 运行库,一般是二进制运行所需要的库,用ldd命令能够看到该二进制或so依赖哪些运行库,如果没有该运行库,会出现找不到该运行库错误;运行库有以下特征:
    1. 在包管理上,一般是直接包(package)命名,或package-libs命名;
    2. 在文件表现上,一般是libxxx.so.y命名,可以多个数字版本结尾,具体见autoconf手册;
  • 开发库,一般是二进制编译所需要的库,因在开发的时候需要,所以称之为开发库,有如下特征:
    1. 开发库以.so和.a文件形式存在,libxxx.so一般以软链接形式链接libxxx.so.y;
    2. 开发库还包括头文件(必须)、cmake宏(可选),m4宏(可选)和pc文件(可选)
    3. 在包管理上,一般是package-devel命名,有较大的包会将静态库、头文件以及动态库分开,分别是package-static、package-headers、package-devel

开发库一般比运行库大很多,一般精简情况下不需要安装开发库;

另外,还有一个库叫调试库,以package-debuginfo命名,当使用gdb等工具调试时,可以安装此库获得更详细的调试信息;

在fedora32上,发现protobuf文件无法生成go语言的grpc的gateway,很奇怪,网上说是因为protobuf中protoc版本问题,也有说插件protoc-gen-go版本问题,其实,是google官方和github官方的"包冲突"问题,通过
dnf provides */protoc-gen-go
发现有golang-github-protobuf和golang-google-protobuf两个包,github的protoc-gen-go版本较低,google的protoc-gen-go版本较高,需要用到protoc-gen-go-grpc ,而这个插件还没有release,导致生成go文件失败。于是,卸载:
sudo rpm -e  golang-google-protobuf --nodeps
接着安装:
sudo dnf install golang-github-protobuf -y
大功告成 :)

Monthly Archives

Pages

Powered by Movable Type 7.3.1

About this Archive

This page is an archive of entries from October 2020 listed from newest to oldest.

May 2020 is the previous archive.

Find recent content on the main index or look in the archives to find all content.