Linker 如何解决此链接器错误

Linker 如何解决此链接器错误,linker,libtool,Linker,Libtool,当我创建等离子模拟项目时,链接器会报告以下错误: ../libpsc/.libs/libpsc.a(push_part_1vb_mix.o):(.rodata+0x38): undefined reference to `psc_push_particles_1vb_ps2_ops' 事实上,问题是显而易见的。c文件../libpsc/FOLDER_A/push_part_1vb_mix.c称之为A.c指的是 struct psc_push_particles_ops psc_push_par

当我创建等离子模拟项目时,链接器会报告以下错误:

../libpsc/.libs/libpsc.a(push_part_1vb_mix.o):(.rodata+0x38): undefined reference to `psc_push_particles_1vb_ps2_ops'
事实上,问题是显而易见的。c文件../libpsc/FOLDER_A/push_part_1vb_mix.c称之为A.c指的是

struct psc_push_particles_ops psc_push_particles_1vb_ps2_ops = { //definition
在../libpsc/FOLDER\u B/psc\u push\u particles\u ps.c中定义,称之为B.c。A.c包含位于../include/中的头文件,其中包含

extern struct psc_push_particles_ops psc_push_particles_1vb_ps2_ops;

但是,链接器仍会报告此错误。那么我如何解决这个问题呢?这是由makefile引起的吗?我不知道链接器如何解决引用问题,任何建议都将不胜感激。提前谢谢

在B.c.中,psc_push_particles_1vb_ps2_ops是有条件的吗?它可以被调节出来。B.c是否被添加到libpsc.a库或链接到任何最终二进制文件?@ldav1s不,没有条件继续该结构。我认为问题出在Makefile中。B.c没有被编译成B.o。这就是问题所在吗?如果B.c没有被编译成B.o,那么B.o就无法被添加到库中或链接到其他二进制文件。所以是的,这是个问题。@ldav1s我明白了。谢谢你的帮助!