linux 编译c程序与动态链接库
linux 下编译c程序与动态链接库
1 动态库h文件和c文件
1.1 h 文件: kaflog4c.h
/** * kaflog4c.h */ #include <stdio.h> #include <stdlib.h> void hello(const char *msg);
1.2 c 文件: kaflog4c.c
/**
* kaflog4c.c
*/
#include "kaflog4c.h"
void hello(const char *msg)
{
printf("Hello %s!\n", msg);
}
2 编译要产生动态库和静态库
2.1 编译动态库:libkaflog4c.so
$ gcc -W -Wall -fPIC -ansi -pedantic -I. -c kaflog4c.c $ gcc -shared kaflog4c.o -o libkaflog4c.so
2.2 编译静态库:libkaflog4c.a
$ ar r libkaflog4c.a kaflog4c.o
3 程序文件
3.1 main.c
编译要产生链接到动态库(libkaflog4c.so)的程序和静态库(libkaflog4c.a)的程序
/**
* main.c
*/
#include "kaflog4c.h"
int main ()
{
hello("cheungmine");
return 0;
}
1) 编译链接到动态库libkaflog4c.so的测试程序main:
$ gcc -W -Wall -ansi -pedantic -I. -c main.c $ gcc main.o -o main ./libkaflog4c.so # 查看依赖 $ ldd ./main # 运行 $ ./main
2) 编译链接到静态库libkaflog4c.a的测试程序main:
$ gcc main.o -o main ./libkaflog4c.a $ ldd ./main # 此时删除libkaflog4c.a和libkaflog4c.so对下面的执行无影响 $ ./main
3.2 main_dl.c
/**
* main_dl.c
*/
#include "kaflog4c.h"
#include <dlfcn.h>
void dl_hello()
{
void *dp;
void (*fn_hello)(const char*);
dp = dlopen("libkaflog4c.so", RTLD_LAZY);
if (!dp) {
printf("%s\n", dlerror());
exit(1);
}
fn_hello = dlsym(dp, "hello");
if (!fn_hello) {
printf("%s\n", dlerror());
exit(1);
}
fn_hello("cheungmine: load library when running");
dlclose(dp);
}
int main()
{
dl_hello();
return 0;
}
编译运行时动态加载动态库libkaflog4c.so的程序
(libkaflog4c.so已经存在于当前目录下)
$ gcc -W -Wall -ansi -I. -c main_dl.c $ gcc main_dl.o -o main_dl -ldl $ ldd main_dl $ ./main_dl $ sudo mv ./libkaflog4c.so /usr/local/lib/ $ ./main_dl libkaflog4c.so: cannot open shared object file: No such file or directory $ sudo ldconfig $ ./main_dl
linux 编译c程序与动态链接库的更多相关文章
- Linux编译安装程序(使用configure、make、 make install)
以安装vim为例. (vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面). 1.获取源文件 首先进入/usr/local下(只是为了方便处理安装文件,位置随意) 用git ...
- linux 编译win32程序
apt-get install mingw32 int main(int argc, char *argv) { printf("Windows Compiler Test\n") ...
- Linux/Ubuntu下 静态编译Qt程序
一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的.会提示缺少……库文件之类的错误.这就是动态编译的结果. 但是如果我们想编译一个程序 ...
- Linux下静态编译Qt程序
一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的.会提示缺少……库文件之类的错误.这就是动态编译的结果. 但是如果我们想编译一个程序 ...
- Linux下C程序的编译,运行,及调试
先查看linux有没有gcc 和 gdb $ gcc -v $ gdb -v 如果没有安装gcc,可以 $ yum install gcc 要获取管理员权限才能安装软件,$ su root (有的li ...
- Linux下C程序的编辑,编译和运行以及调试
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- [C++]Linux之Ubuntu下编译C程序出现错误:“ stray ‘\302'或者'\240' in program”的解决方案
参考文献:[error: stray ‘\240’ in program或 error: stray ‘\302’ in program](http://blog.csdn.net/u01299585 ...
- Linux下通过源码编译安装程序(configure/make/make install的作用,然后在/etc/profile文件里修改PATH环境变量)
一.程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 库文件:就是通常我们见到的lib目录下的文件 配置文件:这个不必多说,都知道 帮助文档:通常是我们在 ...
- linux上应用程序的执行机制
linux上应用程序的执行机制 执行文件是如何在shell中被"执行"的.本文中尽可能少用一些源码,免得太过于无 聊,主要讲清这个过程,感兴趣的同学可以去查看相应的源码了解更多的信 ...
随机推荐
- java-反射深度剖析
Java反射是Java语言一个很重要的特征,简单剖析下反射的定义.原理.使用.性能及应用场景. (一)定义 程序运行时,允许改动程序结构或变量类型,这种语言称为动态语言.java不属于动态语言,但提供 ...
- 2. struct A 和 typedef struct A
2. struct A 和 typedef struct A 2.1 struct A struct A{}定义一个名为struct A的结构体. 下例定义了struct A同时,声明了两个变量(注意 ...
- 基于Windows服务器,从0开始搭建一个基于RTSP协议的直播平台
作案工具下载 EasyDarwin 服务端程序,用来接受推流和拉流 FFmpeg 可以用来推流视频数据到服务端,也可以从服务端拉流下来播放,也可以从一个服务端拉流下来,转推到另一个服务端去. Easy ...
- python 循环和file操作实现用户密码输错三次将用户锁定
一.需求编写登录接口1.输入用户名密码2.认证成功后显示欢迎信息3.输错三次后锁定 二.简单思路登录,三次密码输入错误锁定用户1.用户信息文件:存放用户名和密码2.黑名单文件:将输入三次错误的用户加入 ...
- d4d#9 玩Docker只要浏览器就够了,PWD是个神奇的网站
本文是d4d系列的第9篇,在这一篇中给大家介绍一个学习Docker最为快捷高效的方式,你不需要自己搭建环境,也不用担心把自己的开发环境搞乱,你需要的只是一个浏览器,就可以立即开始学习Docker的常用 ...
- C++笔记001:Microsoft Visual Studio 2010软件的安装与建立第一个cpp文件
原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 我学习C++使用软件为Microsoft Visual Studio 2010. 首先,软件的安装包 链接:https://pan.bai ...
- qPCR检测基因表达的引物数据库
老板推荐了一个专门用来做基因表达定量(qPCR)的引物数据库,还蛮好用的,都是别人实验验证过的,感觉比自己设计的更靠谱一下,附上链接:https://pga.mgh.harvard.edu/prime ...
- 动手实现一个vue中的模态对话框组件
写在前面 对话框是很常用的组件 , 在很多地方都会用到,一般我们可以使用自带的alert来弹出对话框,但是假如是设计 出的图该怎么办呢 ,所以我们需要自己写一个对话框,并且如果有很多地方都用到,那我们 ...
- Java第8次实验(IO流)
参考资料 本次作业参考文件 正则表达式参考资料 第1次实验 1. 字符流与文本文件:使用 PrintWriter(写),BufferedReader(读) 参考文件:基础代码目录Student.jav ...
- Save results to different files when executing multi SQL statements in DB Query Analyzer 7.01
1 About DB Query Analyzer DB Query Analyzer is presented by Master Genfeng,Ma from Chinese Mainl ...