运行时动态库 not found。即使在使用-L和-l参数使得成功编译,在运行时仍然可能会找不到库,因为运行时库的搜索路径可能并没有包含-L的目录。

第一种方法:找到缺少的动态库(由于编译和链接时候的使用到了这个动态库,所以很容易找得到),将其加到/lib,/usr/lib中的一个文件夹下,这几个文件夹是系统默认的搜索路径。将库文件放置在其中,运行时就可以搜索到了( /lib  /usr/lib )。

第二种方法:设置临时增加链接动态库的路径;export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:[your lib]

第三种方法:/etc/ld.so.cache中缓存了动态库路径,可以通过修改配置文件/etc/ld.so.conf中指定的动态库搜索路径,然后执行ldconfig命令来改变。

第四种方法:在链接时语句后面添加如下命令:-Wl,-rpath=[your lib] 。其中-WI是gcc参数,-rpath是ld参数

优先级:4>2>3>1

 

补充:

今天遇到一个问题,用g++5.5版本编译不通过,但是用g++4.8版本编译就通过了。调查下来依旧没有答案,猜测是有一些依赖的.so库使用g++4.8版本编译出来的,导致5.5版本下不通过。

为了保险起见,自己编译的库文件最好使用统一的g++版本。

 

g++和gcc区别

gcc是GCC中的GUN C Compiler(C 编译器)

g++是GCC中的GUN C++ Compiler(C++编译器)

GCC:GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C等语言。

gcc和g++的主要区别

1. 对于 *.c和*.cpp文件,gcc分别当做c和cpp文件编译(c和cpp的语法强度是不一样的)

2. 对于 *.c和*.cpp文件,g++则统一当做cpp文件编译

3. 使用g++编译文件时,g++会自动链接标准库STL,而gcc不会自动链接STL

4. gcc在编译C文件时,可使用的预定义宏是比较少的

5. gcc在编译cpp文件时/g++在编译c文件和cpp文件时(这时候gcc和g++调用的都是cpp文件的编译器),会加入一些额外的宏。

6.在用gcc编译c++文件时,为了能够使用STL,需要加参数 –lstdc++ ,但这并不代表 gcc –lstdc++ 和 g++等价,它们的区别不仅仅是这个。

 

posted on 2020-12-07 15:45  SimbaStar  阅读(975)  评论(0编辑  收藏  举报