iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何进行gcc动态编译
  • 642
分享到

如何进行gcc动态编译

2023-06-13 04:06:11 642人浏览 独家记忆
摘要

如何进行GCc动态编译,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。优点:体积小,编译快 缺点:依赖性高 代码如下:[root@74-82-173-217 shared]#

如何进行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 <stdio.h>
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 <stdio.h>
#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动态编译问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: 如何进行gcc动态编译

本文链接: https://www.lsjlt.com/news/265621.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何进行gcc动态编译
    如何进行gcc动态编译,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。优点:体积小,编译快 缺点:依赖性高 代码如下:[root@74-82-173-217 shared]#...
    99+
    2023-06-13
  • Linux下怎么用GCC编译动态库
    这篇文章主要讲解了“Linux下怎么用GCC编译动态库”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux下怎么用GCC编译动态库”吧!本文主要解决以下几个问题   1 为什么要使用库?...
    99+
    2023-06-13
  • linux如何用gcc编译
    在 Linux 上使用 GCC 编译程序非常简单。以下是一些基本步骤:1. 打开终端并进入你的代码所在的目录。2. 确保你已经安装了...
    99+
    2023-09-08
    linux
  • Ubuntu中gcc如何编译
    这篇文章主要为大家展示了“Ubuntu中gcc如何编译”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Ubuntu中gcc如何编译”这篇文章吧。***,确认你已经安装了build-essentia...
    99+
    2023-06-16
  • CentOS6.8下如何编译安装GCC
    这篇文章主要为大家展示了“CentOS6.8下如何编译安装GCC”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CentOS6.8下如何编译安装GCC”这篇文章吧。关于 GCC 在 CentOS ...
    99+
    2023-06-10
  • 如何进行SQLite编译
    这期内容当中小编将会给大家带来有关如何进行SQLite编译,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。上周,我一直在做一个 SQL 网站。我使用 sqlite 运行网站上的所有查询,并且我想在其中一个例...
    99+
    2023-06-16
  • 如何ubuntu安装gcc编译器
    ubuntu安装gcc编译器的方法:打开终端命令行。输入以下命令进行安装。sudo apt install gcc然后需要输入Ubuntu密码。再输入以下命令安装build-essential。sudo apt install build-...
    99+
    2024-04-02
  • 如何使用java编译器进行编译
    使用Java编译器进行编译可以通过以下步骤:1. 确保已经安装了Java Development Kit (JDK)。可以通过在命令...
    99+
    2023-09-06
    java
  • ubuntu中如何安装gcc编译器
    在Ubuntu操作系统中安装GCC编译器可以通过以下几种方法: 使用apt命令安装:打开终端,执行以下命令来安装GCC编译器: ...
    99+
    2024-04-02
  • 如何在Ubuntu上编译gcc命令
    在Ubuntu上编译gcc命令的示例:打开终端,输入以下命令编辑hello.cpp文件。vim hello.cpp输入如下代码:#include using namespace std;int main(){cout...
    99+
    2024-04-02
  • ubuntu如何用make进行编译
    ubuntu用make进行编译的示例:比如用make编译安装sqlite。下载sqlite源代码,地址:https://www.sqlite.org/download.html。进入源代码根目录,打开终端执行。./configure –pr...
    99+
    2024-04-02
  • 使用 gcc (mingw32) 编译带有静态库的 DLL
    php小编百草为你介绍如何使用gcc (mingw32)编译带有静态库的DLL。在开发过程中,经常需要将静态库打包成DLL以便于在其他项目中调用。使用gcc (mingw32)编译带有...
    99+
    2024-02-09
    typedef lsp
  • JavaScript中的预编译如何进行
    本篇内容介绍了“JavaScript中的预编译如何进行”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!&nb...
    99+
    2024-04-02
  • CentOS系统如何进行aMule编译
    这期内容当中小编将会给大家带来有关CentOS系统如何进行aMule编译,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。先给大家介绍下aMule,它是:"all-platform eMule&qu...
    99+
    2023-06-16
  • Fedora gcc如何安装动态连接
    小编给大家分享一下Fedora gcc如何安装动态连接,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!我原来写的程序在gcc 4.2.1中可以顺利编译,今天在F9中...
    99+
    2023-06-17
  • 如何理解网络Fedora gcc编译中的问题
    如何理解网络Fedora gcc编译中的问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。全面介绍Fedora gcc编译, 这里我发表一下个人理解,这里将介绍Fedora...
    99+
    2023-06-16
  • Java项目中如何实现动态与静态编译
    本篇文章为大家展示了Java项目中如何实现动态与静态编译,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java中的动态和静态编译实例详解首先,我们来说说动态和静态编译的问题。  ...
    99+
    2023-05-31
    java 动态编译 静态编译
  • java实现动态编译并动态加载
    在D盘test目录下有个java文件:AlTest.java public class AlTest { public String sayHello(){ System...
    99+
    2024-04-02
  • linux系统如何进行gcc安装
    linux系统如何进行gcc安装,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。GCC简介:GCC是以GPL许可证所发行的自由软件,也是GNU计划的关键部分。GCC的初衷是为GN...
    99+
    2023-06-28
  • 如何进行Mysql5.6或Centos6.5源码编译安装
    这篇文章给大家介绍如何进行Mysql5.6或Centos6.5源码编译安装,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。## 说明 不同服务器需要改变 server_id ,同一台机器上需要改变 port 关闭防火墙[...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作