千家信息网

如何进行gcc动态编译

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,如何进行gcc动态编译,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。优点:体积小,编译快缺点:依赖性高代码如下:[root@74-8
千家信息网最后更新 2026年11月03日如何进行gcc动态编译

如何进行gcc动态编译,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

优点:体积小,编译快
缺点:依赖性高

代码如下:


[root@74-82-173-217 shared]# cat add.c
int add (int x, int y) {
return x + y;
}


Parsed in 0.007 seconds at 12.13 KB/s
add.c 求和函数

代码如下:


[root@74-82-173-217 shared]# cat print.c
#include
void print (int x) {
printf ("%d\n",x);
}


Parsed in 0.007 seconds at 14.78 KB/s
print 打印函数


代码如下:


[root@74-82-173-217 shared]# cat head.h
#ifndf HEAD_H
#define HEAD_H
int add (int ,int);
void print (int);
#endif


Parsed in 0.007 seconds at 16.34 KB/s
head.h 声明头文件

代码如下:


[root@74-82-173-217 shared]# cat main.c
#include
#include "head.h"
int main () {
int x = add(3, 5);
print(x);
}


Parsed in 0.007 seconds at 19.70 KB/s
main.c 主函数

1、编译动态库
[root@74-82-173-217 shared]# gcc -fpic -shared add.c print.c -o libd.so
使用 -fpic -shared 参数生成 libd.so 动态库

2、生成执行文件
[root@74-82-173-217 shared]# gcc main.c libd.so -o main
加载动态库,生成main执行文件

3、动态库加载
[root@74-82-173-217 shared]# ./main
./main: error while loading shared libraries: libd.so: cannot open shared object file: No such file or directory
因为我们是以动态库编译,执行main时由于找不到 libd.so 库导致执行失败,可以使用 ldd main来查看 libd.so未找到


代码如下:


[root@74-82-173-217 shared]# ldd main
linux-gate.so.1 => (0x0070c000)
libd.so => not found
libc.so.6 => /lib/i686/nosegneg/libc.so.6 (0x0050e000)
/lib/ld-linux.so.2 (0x00ea6000)


Parsed in 0.000 seconds at 434.42 KB/s
解决此问题有三种方法,
1、把动态库路径添加到环境变量中
[root@74-82-173-217 shared]# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/c/shared/

2、把动态库路径添加到 ld.so.conf中
[root@74-82-173-217 shared]# echo "/root/c/shared" >> /etc/ld.so.conf
[root@74-82-173-217 shared]# ldconfig
重新搜索所有动态库,并更新到 /etc/ld.so.cache
[root@74-82-173-217 shared]# ldconfig -v|grep libd.so
查找当前是否包含 libd.so 库

3、直接复制到系统目录下
[root@74-82-173-217 shared]# cp libd.so /lib/

gcc参数
-shared:
该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件

-fpic:
表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。

关于如何进行gcc动态编译问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

动态 代码 编译 生成 文件 问题 函数 不用 位置 参数 方法 更多 符号 类型 路径 帮助 解答 不同 易行 简单易行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 喔噻互联网科技有限公司 北京路客互联网科技有限公司 互联网金融公司科技 狮子座互联网科技有限公司 米客互联网科技 万达互联网科技 滨湖区互联网智能科技产品供应 互联网公司会议桌创意科技软装饰 老年人脱离互联网科技的作文 互联网科技教育视频 速维有品互联网信息科技(苏州)有限公司 洛阳昕诺飞互联网科技有限公司 呼和浩特新华互联网科技学院 互联网科技扶贫时间 青海科技产业互联网发展 如何创新互联网科技 华夏恒生科技与互联网科技 深圳市罗太互联网科技有限公司 梅州GM互联网络科技有限公司 保山互联网科技靠谱吗 互联网科技公司起名 互联网的科技 时间互联网络科技 互联网前沿科技 互联网巨头投资的硬核科技 北京华百购互联网科技有限公司 顶级互联网科技成果有哪些 上海宁丞科技互联网 互联网相关科技技术 现代互联网科技公司
0