当前位置: 首页 > 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	= main

all: $(TARGET)

main: ./main.o ./usb_hid.o
	$(CC) $^ -L/usr/local/lib -lusb-1.0 -o main
	rm -rf ./*.o

./main.o: ./main.c
	$(CC) $(CFLAGS) -c $< -o $@

./usb_hid.o: ./usb_hid.c
	$(CC) $(CFLAGS) -c $< -o $@

clean:
	rm -rf ./*.o
	rm -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的头文件的位置

相关文章:

  • 基于51单片机NEC协议红外遥控发送接收仿真设计( proteus仿真+程序+原理图+报告+讲解视频)
  • sci投稿流程(从投稿到录用全流程解析)
  • Ubuntu镜像源cn.arichinve.ubuntu.com不可用原因分析和解决
  • 瑞云介绍使用ZBrush和Marmoset工具包制作的风格化巨怪战斗机
  • chrome extensions mv3通过content scripts注入/获取原网站的window数据
  • Redis实现API访问频率限制
  • [FineReport]安装与使用(连接Hive3.1.2)
  • ORACLE Redo Log Buffer 重做日志缓冲区机制的设计
  • Midjourney 生成油画技巧
  • Neo4j最新安装教程(图文版)
  • 美容店预约小程序搭建流程
  • 【算法笔记】求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
  • Java集成Onlyoffice以及安装和使用示例,轻松实现word、ppt、excel在线编辑功能协同操作,Docker安装Onlyoffice
  • 深度学习 二:COVID 19 Cases Prediction (Regression)
  • 03-Zookeeper客户端使用
  • Java进阶篇--网络编程
  • 【分布式云储存】Springboot微服务接入MinIO实现文件服务
  • 用go实现http服务端和请求端
  • 【数据结构】选择排序 堆排序(二)
  • POSIX
  • 人民文学奖颁出,董宇辉获传播贡献奖
  • 儿童阅读空间、残疾人友好书店……上海黄浦如何打造城市书房
  • 澳门世界杯“中日对决”,蒯曼击败伊藤美诚晋级女单决赛
  • 平安银行一季度净赚超140亿元降5.6%,营收降13.1%
  • 华夏银行去年净赚超276亿增近5%,个人贷款不良率升至1.8%
  • 硅基世界的“缘分”——系统与人工智能携手进化