`

g++ 动态链接库出现诡异问题,总是链接旧的版本

 
阅读更多
g++ 动态链接库总是链接到旧的内容,除非改函数签名,make clean 也不行。经过几天的痛苦经历后发现原来是这个库之前输出了一个目标文件名到lib文件夹,后来将目标文件名改名为另一个名字并输出到bin里。而依赖这个库的另一个动态库在配置LIBS参数时,并没有删除原来lib下的旧配置,而是添加了新的库名。这样的话,那个依赖这个库的另一个库在Link的时候,总是先在lib下的旧库里找到函数入口并进行链接,就不再往后面添加的/bin下的新库里去找了,于是,只要是旧的签名,总是链接到旧库,而新的签名由于lib下的旧库里没有,就顺延到下面的bin下的新库里去找到并参与链接。
分享到:
评论

相关推荐

    Linux下g++编译与使用静态库和动态库的方法

    下面就分别总结下linux下生成并使用静态库与动态库的方法:(由于是C++项目,所以编译器用的g++,但是与gcc的使用是相通的) 首先是准备工作,把我们需要封装成库文件的函数的头文件与源文件写好,如下: //myAPI.h...

    linux动态链接库的开发实例

    更新库时,可以保留旧版本,避免影响依赖它的程序。 七、动态链接库的移植 由于动态链接库的依赖于系统库和API,因此在不同Linux发行版之间移植时需要注意兼容性问题。通常,使用`abi-compliance-checker`等工具...

    动态链接库生成方法

    自己总结的动态链接库开发方法,讲述了如何使用C语言生成动态链接库

    linix下的动态库调用---g++

    总结来说,本例展示了如何在Linux环境下使用g++创建和使用动态库,包括编译源文件为对象文件、生成动态库、编译主程序以及链接动态库。同时,也介绍了`makefile`在自动化构建中的作用,帮助开发者更高效地管理项目。

    linux下g++编译与使用静态库和动态库

    Linux 下 g++ 编译与使用静态库和动态库 Linux 下 g++ 编译与使用静态库和动态库是 Linux 开发中一个非常重要的知识点。静态库(*.a)和动态库(*.so)是 Linux 下两种常用的库文件类型,了解它们的生成和使用方法...

    动态链接和静态链接的问题

    2. **更新方便**:只需要更新动态库,所有依赖该库的程序都能自动使用新版本,而无需重新编译和安装程序。 3. **延迟加载**:某些库可能只在特定条件下被使用,动态链接允许在真正需要时才加载这些库,减少程序启动...

    java调用动态链接库实例 java调用动态链接库实例 java调用动态链接库实例

    在Java编程中,有时我们需要利用已有的C或C++库,这些库...这个过程涉及到Java编程、JNI规范、C/C++编程以及操作系统层面的动态库加载知识。通过这个实例,开发者可以灵活地利用已有的C/C++库,增强Java应用的功能。

    c++ 静态链接库动态链接库示例

    2. 使用`cl.exe`(Windows)或`g++`(Unix/Linux)等编译器,生成`.dll`或`.so`动态库文件及对应的导入库(`.lib`或`.a`)。 3. 在目标项目中,通过设置链接器选项来指定动态库,并在运行时确保库文件可用。 在C++...

    Linux C静态链接库与动态链接库编程简单介绍

    2. 使用`gcc`或`g++`的`-shared`选项将对象文件链接成动态库,例如: ``` gcc -shared -o libmylib.so file1.o file2.o ``` 3. 在源代码中使用`#include`引入库头文件,并在编译时使用`-L`指定库路径,`-l`指定...

    opencv-2.4.12版本已编译linux-arm动态链接库

    同时,需要确保在链接阶段指向正确的动态库路径,可以使用`ldconfig`命令更新库搜索路径,或者在编译时通过`-L`选项指定库路径,通过`-l`选项指定链接的库名(例如`-lopencv_core`)。 在开发过程中,开发者可以...

    QNX系统中添加自己编译的.so库.zip_QNX .so文件_SO打包_qnx文件_qnx系统g++编译_so库

    与静态库(.a文件)不同,动态库不会被编译进可执行文件,而是运行时按需加载,这有助于减少程序的内存占用和启动时间。 在QNX系统中,使用g++编译器来创建.so库。以下是基本步骤: 1. **编写源代码**:使用C++...

    使用c++编写和使用.so动态链接库

    6. **编译C++程序**:使用`g++`编译器,指定输入文件和动态链接库,例如`g++ -o use_mylib use_mylib.cpp ./mylib.so`。这样生成的可执行文件`use_mylib`就可以在运行时链接到`mylib.so`。 7. **运行时动态加载.so*...

    Linux动态链接库.so文件的创建与使用

    在Linux系统中,动态链接库(Dynamic Linking Library,通常以`.so`为扩展名)是一种重要的编程资源,它允许程序共享代码,从而节省内存并提高执行效率。本篇文章将深入探讨如何创建和使用`.so`文件,以及相关的重要...

    linux g++ 4.4.7-3版本安装

    对于仅安装了4.4.7-3版本的gcc,未安装相应版本的g++用户。需要按顺序安装这三个rpm包即可成功安装g++。执行命令rpm -ivh libstdc++->libstdc++-devel->gcc-g++,安装完这三个rpm包,就可以成功安装g++的。其他版本...

    Linux C++编译及 静态/动态 链接库 笔记

    - **动态链接**:程序运行时才加载所需的库,这使得程序更小,但需要对应的动态库文件存在于系统中。动态链接有两种形式:共享对象库(.so文件)和位置独立代码库(.a文件)。 4. **静态链接库(.a文件)**: - ...

    g++源码库.zip

    《g++源码库》是针对C++编程语言的编译器g++的源代码集合,其中包含了标准库和标准模板库(STL)的源码。这些源码对于深入理解C++语言、优化编程技巧以及探究编译器工作原理至关重要。通过分析g++8.1.0版本的源代码...

    linux环境中c++调用lua动态链接库以及编译方法

    2. 编译时链接`liblua.so`,可以使用`g++`命令行选项 `-llua` 或指定动态库路径:`-L/path/to/your/lua/library`。 3. 如果需要在运行时找到动态库,可能还需要设置`LD_LIBRARY_PATH`环境变量,或者在系统`/etc/ld....

    g++降低版本

    ubuntu在vcs 安装的时候,必须要降低gcc、g++的版本,才能使用。 一般降低到4.7版本可以使用

    ubuntu-gcc、g++不同版本的安装和切换.pdf

    ### Ubuntu GCC、G++ 不同版本的安装与切换详解 #### 概述 ...`update-alternatives`工具的强大之处在于它不仅能够方便地切换版本,还能确保GCC和G++之间的版本一致性,从而避免因版本不匹配而引发的问题。

    g++ gcc编译器安装包及其依赖

    `gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC)` 这个信息表明,这个安装包包含的是一个较旧版本的GCC,具体是4.8.5版,发布日期为2015年6月23日,这是Red Hat Linux的一个发行版本,代号可能是RHEL或CentOS...

Global site tag (gtag.js) - Google Analytics