Linux中生成so库的文件引用另一个so库问题的解决
- 互联网
- 2025-08-18 06:12:02

文章目录 一、问题介绍二、问题解决 一、问题介绍
由于项目需求,需要将一个“编译时引用了另一个动态链接库”的文件(名为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的头文件的位置
Linux中生成so库的文件引用另一个so库问题的解决由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Linux中生成so库的文件引用另一个so库问题的解决”