Makefile CMake无法将符号添加到o文件中的静态库中
我有一个使用cmake构建系统的简单项目,该系统创建静态库,其中包括我的ringbuffer实现。从make输出中,我可以看到Makefile CMake无法将符号添加到o文件中的静态库中,makefile,cmake,linker,g++,Makefile,Cmake,Linker,G++,我有一个使用cmake构建系统的简单项目,该系统创建静态库,其中包括我的ringbuffer实现。从make输出中,我可以看到ringbuffer.c.o文件是用以下符号创建的: 00000000000000f8 g F .text 0000000000000066 ringbuf_put 000000000000015e g F .text 000000000000008d ringbuf_get 00000000000001eb g F .text 000000
ringbuffer.c.o
文件是用以下符号创建的:
00000000000000f8 g F .text 0000000000000066 ringbuf_put
000000000000015e g F .text 000000000000008d ringbuf_get
00000000000001eb g F .text 0000000000000012 ringbuf_full
00000000000001fd g F .text 0000000000000012 ringbuf_capacity
000000000000020f g F .text 0000000000000071 ringbuf_size
0000000000000280 g F .text 000000000000002b ringbuf_clear
尽管它们在libbuffer.a中未定义,还是多次定义
0000000000000000 l df *ABS* 0000000000000000 ringbuffer.c
00000000000000f8 g F .text 0000000000000066 ringbuf_put
000000000000015e g F .text 000000000000008d ringbuf_get
00000000000001eb g F .text 0000000000000012 ringbuf_full
00000000000001fd g F .text 0000000000000012 ringbuf_capacity
000000000000020f g F .text 0000000000000071 ringbuf_size
0000000000000280 g F .text 000000000000002b ringbuf_clear
0000000000000000 *UND* 0000000000000000 ringbuf_put
0000000000000000 *UND* 0000000000000000 ringbuf_size
0000000000000000 *UND* 0000000000000000 ringbuf_get
0000000000000000 *UND* 0000000000000000 ringbuf_clear
用于链接库的命令:
/usr/bin/ar qc ../lib/libbuffer.a CMakeFiles/ringbuf.dir/ringbuffer.c.o
/usr/bin/ranlib ../lib/libbuffer.a
有什么想法吗?因为这是一个简单的CMake项目,你能将你的CMake代码添加到你的帖子中吗?@squareskittles这个项目比这要复杂得多。为了回答这个问题,我把它简化了一点,它不是make输出,而是nm
或objdump
。它还显示符号已定义。你能分享一下第二次输出是如何产生的吗?是的,对不起,我错了。这确实是一个很好的例子。第一个是ringbuffer.c.o
上的objdump,第二个是libbiffer.a