日期:2014-05-16  浏览次数:20672 次

Linux动态库加载路径

问题

按如下步骤在Ubuntu上编译安装Google protobuf

  $ ./configure
  $ make
  $ make check
  $ make install

运行

protoc --version

出现找不到动态库的错误

protoc: error while loading shared libraries: libprotobuf.so.7: cannot open shared object file: No such file or directory

原因

原因是protobuf的默认安装位置是 /usr/local,/usr/local/lib?不在系统默认的 LD_LIBRARY_PATH 里。这个问题protobuf 的 README.txt 写得很清楚,怪自己不仔细。

?

?README.txt 写道
** Hint on install location **

By default, the package will be installed to /usr/local. However,
on many platforms, /usr/local/lib is not part of LD_LIBRARY_PATH.
You can add it, but it may be easier to just install to /usr
instead. To do this, invoke configure as follows:

./configure --prefix=/usr

If you already built the package with a different prefix, make sure
to run "make clean" before building again.

解决

参考文章里面提供了几种方法,这里只使用其中的一种。

1. 创建文件?/etc/ld.so.conf.d/libprotobuf.conf 包含以下内容

/usr/local/lib

2. 运行命令

sudo ldconfig 

这时再运行 protoc --version 就可以得到版本号了

$ protoc --version
libprotoc 2.4.1

参考

  • linux共享库位置配置(LD_LIBRARY_PATH环境变量 或者 更改/etc/ld.so.conf 或者 使用-R选项)
  • Shared Library Search Paths