链接过程

author author     2022-11-18     275

关键词:

链接器的意义

链接器的主要作用是把各模块之间相互引用的部分处理好,使得各模块之间能够正确的衔接

技术分享图片


模块链接

  1. 静态链接

    -由链接器在链接时将库的内容直接加入到可执行程序中

    技术分享图片

    Linux下静态库的创建和使用

     -编译静态库源码:gcc -c lib.c -o lib.o

     -生成静态库文件:ar -q lib.a lib.o  //将 lib.o 与其他文件打包到 lib.a 中 

     -使用静态库编译:gcc main.c lib.a -o main.out

  2. 动态链接

    -可执行程序在运行时才动态加载库进行链接

    -库的内容不会进入可执行程序当中

    技术分享图片

    Linux下动态库的创建和使用

    -编译动态库源码:gcc -shared dlib.c -o dlib.so

    -使用动态库编译:gcc main.c -ldl -o main.out

    -关键系统调用

     1.dlopen:打开动态库文件

     2.dlsym:查找动态库中的函数并返回调用地址

     3.dlclose:关闭动态库文件

    dlib.c库

char* name()

    return "Dynamic Lib";

int add(int a, int b)

    return a + b;

test.c

#include <stdio.h>
#include <dlfcn.h>
int main()

    //打开(加载)动态库
    void* pdlib = dlopen("./dlib.so", RTLD_LAZY);
    char* (*pname)();//函数指针
    int (*padd)(int, int);//函数指针
    if( pdlib != NULL )
    
        //查找函数地址
        pname = dlsym(pdlib, "name");
        padd = dlsym(pdlib, "add");
        if( (pname != NULL) && (padd != NULL) )
        
            printf("Name: %s\n", pname());
            printf("Result: %d\n", padd(2, 3));
        
        //关闭动态库
        dlclose(pdlib);
    
    else
    
        printf("Cannot open lib ...\n");
    
    return 0;


小结

1.链接是指将目标文件最终链接为可执行程序

2.根据链接方式的不同,链接过程可以分为:

 -静态链接:目标文件直接链接进入可执行程序

 -动态链接:在程序启动后才动态加载目标文件



将sybase存储过程作为链接服务器过程sql server 2008执行

】将sybase存储过程作为链接服务器过程sqlserver2008执行【英文标题】:Executesybasestoredprocedureaslinkedserverproceduresqlserver2008【发布时间】:2011-02-2216:22:45【问题描述】:编辑最终目标是使用来自SQLServer2008的输入和输出参数通过链接服... 查看详情

如何对链接服务器执行存储过程?

】如何对链接服务器执行存储过程?【英文标题】:Howtoexecuteastoredprocedureagainstlinkedserver?【发布时间】:2019-01-2319:16:40【问题描述】:我们目前对链接服务器执行存储过程:EXECUTE[LinkedServer].[DatabaseName].[dbo].[MyProcedure]例如:EXECUTE... 查看详情

第20课链接过程简介

1.链接器的意义(1)每个C语言源文件被编译后生成目标文件,这些目标文件最终要被链接在一起生成可执行文件。(2)链接器的主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确的衔接。 2.静... 查看详情

如何通过数据库链接执行 Oracle 存储过程

】如何通过数据库链接执行Oracle存储过程【英文标题】:HowtoexecuteanOraclestoredprocedureviaadatabaselink【发布时间】:2010-09-1910:33:47【问题描述】:我可以通过数据库链接调用Oracle中的存储过程吗?数据库链接是正常的,因此语法如...... 查看详情

如何预先链接html页面上传过程

】如何预先链接html页面上传过程【英文标题】:Howtolinkhtmlpagesbeforehanduploadingprocess【发布时间】:2021-09-2117:41:38【问题描述】:我是一名新手前端开发人员,尝试使用HTML、CSS和引导程序构建网站。我想问你几个关于上传过程的... 查看详情

Firebase 动态链接无法在安装过程中继续存在

】Firebase动态链接无法在安装过程中继续存在【英文标题】:FirebaseDynamicLinksdoesnotsurviveinstallationprocess【发布时间】:2017-05-0510:20:39【问题描述】:我将Firebase动态链接pod更新为1.4版本。在这个版本中,我发现名为FIRDynamicLinkCompone... 查看详情

彻底搞懂程序链接过程之动态链接(代码片段)

通过静态链接,可以生成一个可执行文件,这个可执行文件既可以是完全链接的也可以是部分链接的,对于部分链接的可执行文件,有些符号引用需要等到可执行文件加载时甚至是运行时才会进行符号解析和重定... 查看详情

在 Makefile 的链接过程中添加库的问题

】在Makefile的链接过程中添加库的问题【英文标题】:probleminaddinglibrariesduringlinkingprocessinMakefile【发布时间】:2019-07-2708:32:01【问题描述】:我是Makefile的新手。我在一个项目中使用opencv和lpthread库。以下makefile代码似乎不起作用... 查看详情

如何缩短 Visual Studio 中的链接过程

】如何缩短VisualStudio中的链接过程【英文标题】:HowtoshortenlinkingprocessinVisualStudio【发布时间】:2015-03-3002:37:42【问题描述】:我正在使用VisualStudioC++中的allegro库。每次我创建项目时,我都必须经过以下过程。右键单击右侧解决... 查看详情

VS2005链接过程中合并元数据时忽略文件

】VS2005链接过程中合并元数据时忽略文件【英文标题】:IgnoringfileswhenmergingmetadataduringthelinkingprocessinVS2005【发布时间】:2009-05-0618:45:03【问题描述】:我试图让我的项目使用公共语言运行时进行编译,但当我尝试进行调试构建时... 查看详情

java示例代码_在maven构建过程中链接本地存储库

java示例代码_在maven构建过程中链接本地存储库 查看详情

是否可以让 SCP 在复制过程中忽略符号链接?

】是否可以让SCP在复制过程中忽略符号链接?【英文标题】:IsitpossibletomakeSCPignoresymboliclinksduringcopy?【发布时间】:2012-06-1707:50:17【问题描述】:我需要重新安装我们的一台服务器,作为预防措施,我想将/home、/etc、/opt和/Service... 查看详情

第20课链接过程简介(代码片段)

...目标文件,这些目标文件如何生成最终的可执行程序呢?链接器: 静态链接: 静态链接就是将库文件或者目标文件直接加入到可执行文件当中。Linux下静态库的创建和使用: 静态库示例程序:20-1.c1#include<stdio.h>2... 查看详情

执行使用 PyMSSQL 引用链接服务器的存储过程时出错

】执行使用PyMSSQL引用链接服务器的存储过程时出错【英文标题】:ErrorExecutingStoredProcedurethatReferencesLinkedServerwithPyMSSQL【发布时间】:2016-08-0819:45:13【问题描述】:我正在尝试通过pymssql从python脚本执行存储过程,该脚本与链接服... 查看详情

如何在以下过程中正确引用数据库链接名称

】如何在以下过程中正确引用数据库链接名称【英文标题】:HowcanIproperlyreferencethedatabaselinknameinthebelowprocedure【发布时间】:2019-02-0105:57:06【问题描述】:我在另一个论坛上问了一个类似的问题,但我并没有完全正确地理解上下... 查看详情

在触发器或过程中测试链接服务器连接

】在触发器或过程中测试链接服务器连接【英文标题】:Testinglinkedserverconccetioninsidetriggerorprocedure【发布时间】:2009-05-2915:04:21【问题描述】:我写了一个触发器来更新链接服务器上的本地表和类似表。CREATETRIGGERmyTtableUpdateONmyTab... 查看详情

您如何从通过数据库链接执行的存储过程中进行假脱机?

】您如何从通过数据库链接执行的存储过程中进行假脱机?【英文标题】:howdoyouspoolfromastoredprocedurethatisexecutedthroughadatabaselink?【发布时间】:2012-01-2721:16:34【问题描述】:我正在使用UNIX脚本运行通过数据库链接启动存储过程的... 查看详情

如何在存储过程中将数据库链接作为变量传递

】如何在存储过程中将数据库链接作为变量传递【英文标题】:HowdoIpassadatabaselinkasavariableinastoredprocedure【发布时间】:2019-01-3103:58:12【问题描述】:我的桌子上有一个表格。表单中的条目将定义用于查询的链接。为了使其工作... 查看详情