当前位置: 首页 > news >正文

Linux中生成so库的文件引用另一个so库问题的解决

文章目录

    • 一、问题介绍
    • 二、问题解决

一、问题介绍

由于项目需求,需要将一个“编译时引用了另一个动态链接库”的文件(名为main.c),再编译成一个动态链接库。

简要说明一下,即原本的项目代码里,包含main.c,usb_hid.c和usb_hid.h三个文件,正常编译可执行文件main的依赖为

main.o依赖libusb库,usb_hid.c依赖libusb库,而可执行文件main依赖前两步编译生成的main.o和usb_hid.o

对应的makefile如下

CC      = gcc
CFLAGS	= -I . -I /usr/local/include/libusb-1.0 -std=c99
TARGET	= mainall: $(TARGET)main: ./main.o ./usb_hid.o$(CC) $^ -L/usr/local/lib -lusb-1.0 -o mainrm -rf ./*.o./main.o: ./main.c$(CC) $(CFLAGS) -c $< -o $@./usb_hid.o: ./usb_hid.c$(CC) $(CFLAGS) -c $< -o $@clean:rm -rf ./*.orm -rf ./main# ----------------------------------------------------------------------------.PHONY: $(PHONY) clean

二、问题解决

之前没有搞清楚依赖关系,没有引入usb_hid相关的函数,因此使用ldd -r libpufmac.so命令后会报如下错误:

OSError: ./libpufmac.so: undefined symbol: usb_index
OSError: ./libpufmac.so: undefined symbol: xxxxx
......

结合之前编译动态链接库的经验,正确的编译命令如下,使用该命令编译后,可生成对应的libpufmac.so,不会再出现上面的错误

gcc -shared -fPIC main.c usb_hid.c -o libpufmac.so -L/usr/local/lib -lusb-1.0 -I /usr/local/include/libusb-1.0 -std=c99

通过 -L引用对应的动态链接库,再通过 -I指定include的头文件的位置

http://www.lryc.cn/news/182555.html

相关文章:

  • EDI是连接原始电子商务和现代电子商务的纽带
  • 星宿UI2.4资源付费变现小程序源码 支持流量主
  • 代码随想录训练营二刷第四十六天 | 完全背包 518. 零钱兑换 II 377. 组合总和 Ⅳ
  • python安装第三方模块方法
  • 广西小贷公司设立及小贷牌照申请政策要求
  • PyTorch应用实战二:实现卷积神经网络进行图像分类
  • 面试系列 - Java常见算法(二)
  • Cortex-A9 架构
  • 【C语言】循环结构程序设计(第二部分 -- 习题讲解)
  • UGUI交互组件Toggle
  • 亲,您的假期余额已经严重不足了......
  • 【软件测试】自动化测试selenium(一)
  • Nginx实现动静分离
  • 【算法题】309. 买卖股票的最佳时机含冷冻期
  • 1951-2011年长序列高时空分辨率月尺度温度和降水数据集
  • 十天学完基础数据结构-第六天(树(Tree))
  • RobotFramework流程控制(最新版本)
  • win11 好用的 快捷方式 --chatGPT
  • 在大数据相关技术中,HBase是个分布的、面向列的开源数据库,是一个适合于非结构化数据存储的数据库。
  • 910数据结构(2020年真题)
  • MyBatisPlus(八)范围查询
  • 【day10.04】QT实现TCP服务器客户端搭建的代码
  • milvus 结合Thowee 文本转向量 ,新建表,存储,搜索,删除
  • GEO生信数据挖掘(三)芯片探针ID与基因名映射处理
  • 力扣 -- 96. 不同的二叉搜索树
  • 经典算法-枚举法(百钱买百鸡问题)
  • Gurobi设置初始可行解
  • Zabbix配置监控文件系统可用空间小于30GB自动告警
  • 进程调度算法之先来先服务(FCFS),短作业优先(SJF)以及高响应比优先(HRRN)
  • MyBatisPlus(九)模糊查询