链接时缺少stdc++.so.6库

问题描述:算法同事给了dsp同事新的算法库(一堆),dsp同事把需要的拿出来,编译报了一堆错:
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/../lib/gcc/arm-hisiv300-linux-uclibcgnueabi/4.8.3/../../../../arm-hisiv300-linux-uclibcgnueabi/bin/ld: warning: libstdc++.so.6, needed by ../lib/libicf/osal.so, not found (try using -rpath or -rpath-link)
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/../lib/gcc/arm-hisiv300-linux-uclibcgnueabi/4.8.3/../../../../arm-hisiv300-linux-uclibcgnueabi/bin/ld: warning: libhive_common.so, needed by ../lib/libicf/third_party/lib_hi3536_single_V300/libhive_AEC.so, not found (try using -rpath or -rpath-link)
../lib/libicf/libicf_hisi3536.a(ICF_Toolkit.o):在函数‘ICF_SetCoreAffinity’中:
ICF_Toolkit.cpp:(.text+0x328):对‘__cxa_end_cleanup’未定义的引用
  • 怀疑过是makefile的脚本不对,链接顺序不对(也是问题),改过之后编译还是报错。
  • 然后看了算法给的demo,看了最后的链接语句,发现多了四十多项第三方库,加进去还是不行
  • 然后对比看了编译demo的makefile,把一些编译选项也加进来,像这些:
    -march=armv7-a -mfloat-abi=softfp -mfpu=neon-vfpv4 -rdynamic 
    
    • 加进来还是不行
  • 最后看到TARGET的编译规则:
    $(TARGET):	$(OBJ)
    	$(CC) $(CFLAGS) -o $@ $(OBJ) -lstdc++ -lpthread -ldl -lm -rdynamic $(LD_FLAGS) 
    	-rm -f $(OBJ)
    
最后才意识到gcc编译时库stdc++应该手动加进来,脚本加一下就通过了:
$(BIN) : $(OBJS)
	$(COMPILE_TOOLS) -Wl,-Map=$(BIN_MAP) -o $@ $(OBJS)  $(LDFLAGS) -lstdc++ $(LIBS)

你可能感兴趣的:(调试经验)