首页 > 其他分享 >链接参数export dynamic和-rdynamic的使用

链接参数export dynamic和-rdynamic的使用

时间:2023-07-21 17:56:31浏览次数:33  
标签:return rdynamic void dynamic export test main libA dlopen

存在程序main通过dlopen使用libA中的符号:

main.c:

1 #include <stdio.h>
 2 #include <dlfcn.h>
 3 
 4 typedef void (*func)(void); 
 5 
 6 
 7 void test_main()
 8 {
 9     return;
10 }
11 
12 
13 int main()
14 {
15     void *handle = dlopen("./libA.so", RTLD_NOW|RTLD_GLOBAL);
16     if(NULL == handle)
17     {
18         fprintf(stderr, "%s\n", dlerror());
19         return 1;
20     }
21     func test = dlsym(handle, "test");
22 
23     (*test)();
24 
25     return 0;
26 
27 }

libA的代码又反向依赖main中符号:

1 void test()
2 {
3     test_main();
4     return;
5 }

 

这样,gcc -g main.c -ldl 编译程序(注意这里没有链接libA),运行程序main时会报错,报错的原因就是dlopen失败,失败的原因就是:

  • ./libA.so: undefined symbol: test_main

 

解决方法有两个:

A、不要dlopen打开这个库,即注释掉dl过程直接调用test,此时直接大大方方的-l就可以了

  • gcc -g main_ld.c -L. -lA

B、 使用所述参数,将test_main放到程序main的动态符号表中,保证dlopen的成功:

  • gcc -rdynamic -g main.c -ldl

 

 

标签:return,rdynamic,void,dynamic,export,test,main,libA,dlopen
From: https://www.cnblogs.com/lidabo/p/17572089.html

相关文章

  • Kubernetes部署Kubernetes-event-exporter
    Kubernetes部署Kubernetes-event-exporter在使用Kubernetes进行应用程序的部署和管理时,了解集群中发生的事件是非常重要的。Kubernetes事件是指与集群中的各种资源相关的状态更改。通过监视和分析这些事件,我们可以获得有关应用程序和基础设施的关键信息,从而更好地管理和维护我们的......
  • 一个mysql-exporter实现监控多个mysql容器
    一个mysql-exporter实现监控多个mysql容器在容器化的环境中,使用多个MySQL容器来支持不同的应用程序是非常常见的。在这种情况下,为了更好地监控和管理MySQL容器,我们可以使用mysql-exporter。mysql-exporter是一个开源的Prometheusexporter,它可以提供MySQL实例的性能指标和监控信......
  • node_export自定义启动监控指标
    /usr/local/bin/node_exporter--collector.ntp--collector.supervisord--collector.supervisord.url=http://localhost:9001/RPC2--collector.textfile.directory=/var/opt--collector.time--collector.cpu--collector.filesystem--collector.filefd--collector.loa......
  • 使用Power Automate上传附件到Dynamics 365集成的SharePoint
      在Dynamics365中使用SharePoint集成做实体的附件管理,这里不像用Annotation实体存放附件可以直接用代码直接创建Annotation记录,如果想要对外部提供接口把附件上传到SharePoint,我们可以使用PowerAutomate中的SharePoint组件来生成文件,通过HTTP流供给外部系统调用。  下......
  • NODE_EXPORTER 修改端口
    转载自:https://duanzhanpu.cn/index.php/archives/87/================== 修改prometheus中node-exporter端口因其他业务已占用9100端口,需修改为其他端口#启动时指定端口$nohup./node_exporter--web.listen-address=:7100......
  • 开发自己的Prometheus Exporter、实现自定义指标
    PrometheusExporter基础知识PrometheusExporter的概念、工作原理 PrometheusExporter是一个用来收集和暴露指标数据的工具,通过与Prometheus监控系统一起使用。它的结构包括两个组件:Collector和Exporter:Collector:用于从目标应用程序或系统收集指标并将其转化为Prometheus......
  • 前端ExportExce导出表格数据
    前端使用ExportExce导出表格数据步骤一、下载依赖[email protected]@0.14.1--save步骤二、创建一个ExportExce.js文件注意:vue中的话一般是在util文件夹下创建的nuxt的话在plugins下ExportExce.js代码如下/*eslint-disable*/import{save......
  • net-core(DynamicExpresso.Core)
    ==============================(Install-PackageDynamicExpresso.Core)======================================varwhereExpression=$"m.{queryField}==\"{queryValue}\"";stringwhereExpression="customer.Age>18&&......
  • SystemVerilog Dynamic Array Randomization
    https://verificationguide.com/systemverilog/systemverilog-dynamic-array-randomization/DynamicArrayRandomizeForadynamicarray,itispossibletorandomizebotharraysizeandarrayelements.randomizedynamicarraysizeInbelowexample,dynamicarr......
  • MySQL 8.0 Dynamic Redo Log Sizing翻译
    本文是MySQL8.0DynamicRedoLogSizing[1]这篇文章的翻译。如有翻译不当的地方,敬请谅解,请尊重原创和翻译劳动成果,转载的时候请注明出处。谢谢!这篇博文将讨论MySQL8.0.30中引入的最新功能/特性:重做日志动态调整大小(dynamicredologsizing)。除了InnoDB缓冲池(bufferpool)......