动态库 静态库-linux动态库静态库问题,大牛请进

问题描述

linux动态库静态库问题,大牛请进

/////// static.h
void static_print();
///////static.cpp
#include
#include "static.h"
void static_print() {
std::cout<<"This is static_print function"<
}
////// shared.h
void shared_print();
////// shared.cpp
#include
#include "shared.h"
#include "static.h"
void shared_print() {
std::cout<<"This is shared_print function";
static_print();
}

#include
#include
#include
#include
#include "static.h"

using namespace std;

int main()
{
typedef void (*FUN_ADD)(void);
FUN_ADD fun = NULL;
void* plib;
plib = dlopen("./libshared.so", RTLD_NOW | RTLD_GLOBAL);
if( NULL == plib )
cout << "Can't open the libshared.son";
else
cout << "Open the libshared.so!n";

fun = (void (*)(void))dlsym(plib, "shared_print");
if( NULL == fun )
    cout << "Can't load function 'shared_print'n";

fun();

dlclose(plib);
return 0;

}
g++ -c static.cpp
ar -r libstatic.a static.o
g++ shared.cpp -shared -fPIC -o libshared.so
g++ test.cpp -o test libstatic.a -ldl

测试每次失败,请大牛指示。。。。

时间: 2024-10-02 20:20:26

动态库 静态库-linux动态库静态库问题,大牛请进的相关文章

c++-linux动态库与静态库之间的调用问题

问题描述 linux动态库与静态库之间的调用问题 linux程序编译通过,运行时出错symbol lookup error: /usr/lib/libE.so: undefined symbol: test_D1 静态库libD.a中: 提供函数接口test_D(),test_D1(),test_D2() 动态库libE.so中:提供函数接口test_E() int test_E() { test_D(); return 0; } 应用程序make时,链接了动态库libE.so,将静态库libD

linux 动态库-linux动态库比静态小吗

问题描述 linux动态库比静态小吗 同一个库,为什么编译成动态链接库比编译成静态链接库要小? 另外,发布的时候肯定要把动态库与可执行文件一起发布的啊,这样动态编译要发布的文件(可执行文件加上动态库)还比静态编译要发布的文件(只发布可执行文件即可,库也包含在可执行文件里面了)小吗? 解决方案 动态库拆成了lib和so文件,有可能比静态库a文件要要小.发布的时候只要so文件就可以了.通过动态加载的方式 解决方案二: 大多数情况下,动态库比静态库小,但也不是绝对的.

Linux 中的静态库和动态库简介及生成过程示例

在实际的软件开发项目中,不是每一行代码都需要我们亲自写.在我们的软件产品中,有一些代码(尤其是函数)的出现频率很高,它们可以被当作公共代码来反复使用.为了避免重复劳动,我们就把这些公共代码编译为库文件,供需要的程序调用.在Linux中,库分为静态库和动态库两种. 本文对静态库和动态库进行了详细的介绍,并用实际的C代码演示了这两种库的生成过程. 一.静态库和动态库简介 众所周知,程序一般需要经过预处理.编译.汇编和链接这几个步骤才能变成可执行的程序.在实际的软件开发中,对于一些需要被许多模块反复使

Linux中的静态库和动态库简介及生成过程示例

[文章摘要] 在实际的软件开发项目中,不是每一行代码都需要我们亲自写.在我们的软件产品中,有一些代码(尤其是函数)的出现频率很高,它们可以被当作公共代码来反复使用.为了避免重复劳动,我们就把这些公共代码编译为库文件,供需要的程序调用.在Linux中,库分为静态库和动态库两种. 本文对静态库和动态库进行了详细的介绍,并用实际的C代码演示了这两种库的生成过程. 一.静态库和动态库简介 众所周知,程序一般需要经过预处理.编译.汇编和链接这几个步骤才能变成可执行的程序.在实际的软件开发中,对于一些需要被

makefile把一个 .cpp文件和它所依赖的几个 .a(静态库文件 ) 生成一个动态库文件.so

问题描述 makefile把一个 .cpp文件和它所依赖的几个 .a(静态库文件 ) 生成一个动态库文件.so 假设编译交叉编译工具路径为dir1(arm-linux-androideabi-gcc-4.9 ),存放生成的.so文件的路径为dir2,test.cpp,依赖1.a,2.a,3.a这三个静态文件库,Makefile文件应该怎么写 解决方案 arm-linux-androideabi-gcc-4.9 -fPIC -shared -o dir2/xxx.so test.cpp 1.a 2

解决Linux动态库版本兼容问题

说道"动态库版本兼容",很多人头脑中首先蹦出的就是"Dll Hell".啊,这曾经让人头疼的难题.时至今日,这个难题已经很好地解决了. 在进一步讨论之前来思考一个问题:Linux下为什么没有让人头痛的"DllHell"?回答这个问题,非常easy,因为--Linux下根本没有dll! 哈哈,当然这只是个玩笑,接下来展开一下这个话题,很多有动态库的系统都会面临这个难题,但各自解决的思路却各不相同. Dll hell是指windows 上动态库新版本

分析Windows和Linux动态库_unix linux

    摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理.但不同操作系统的动态库由于格式 不同,在需要不同操作系统调用时需要进行动态库程序移植.本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Linux上的方法和经验. 1.引言 动态库(Dynamic Link Library abbr,DLL)技术是程序设计中经常采用

工具-linux 动态库中方法查看

问题描述 linux 动态库中方法查看 大神们,我想查看linux 动态库中方法的详细定义,问有啥方法或工具能否实现????? 解决方案 没有,基本上nm,objdump等只能看到函数名等.都被修饰了 解决方案二: 楼上正解.......................

linux服务器-Linux动态加载动态库无法进去gdb调试

问题描述 Linux动态加载动态库无法进去gdb调试 动态加载动态库无法单步调试,断点可以设置成功,也能进入断点,就是不能单步调试