zoukankan      html  css  js  c++  java
  • linux g++ 查找动态链接库

     

    运行时动态库 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++等价,它们的区别不仅仅是这个。

  • 相关阅读:
    选择合适的数据存储(SSCE,Access,XML等)
    [翻译]SQL Server 工作集消息
    [翻译]使用SQL Server 优化提示
    [翻译]玩转 Locked Pages,AWE,Task Manager和Working Set
    关于XML数据库与普通数据库(概述)
    去除某SQL Server数据库中所有约束,索引,触发器,统计的代码
    SQL 存储过程读取视图数据
    C# list<>数据填充到Dataset里
    ASP.NET 截取固定长度字符串显示在页面,多余部分显示为省略号
    Office 安装程序找不到office.zhcn\*.文件
  • 原文地址:https://www.cnblogs.com/starRebel/p/14097465.html
Copyright © 2011-2022 走看看