GCC符号查找错误

时间:2017-02-22 09:56:50

标签: c gcc makefile symbols undefined-symbol

我尝试启动我的可执行文件,但是我收到了这个错误:

  

.dudac / stage / monkey / lib / hello.duda:undefined symbol:DDS_sequence_BoardGlobalParameters_BoardGPSoftState__alloc

链接和编译工作正常

这是我的makefile:

# ====================================
# Date      : Tue 21, Feb 2017 at 10:15


NAME    = hello
CC      = /opt/windriver/wrlinux-small/7.0-xxxxxx-3543dr/sysroots/x86_64-wrlinuxsdk-linux/usr/bin/arm-wrs-linux-gnueabi/arm-wrs-linux-gnueabi-gcc
CFLAGS  = -g -Wall -DDEBUG -L/opt/PrismTech/Vortex_v2/Device/VortexOpenSpliceRTE/6.7.1p2/RTS/armv7at2_vfp_neon.WRlinux7_gcc/lib -ldcpssac -ldcpsisocpp2
#-g -Wall -DDEBUG -fPIC

LDFLAGS =
DEFS    =
INCDIR  =  -I/home/T0181049/.dudac/stage/monkey//include/ -I/home/T0181049/.dudac/stage/monkey//src/include -I/home/T0181049/.dudac/stage/monkey//plugins/duda/src -I/home/T0181049/.dudac/stage/monkey//plugins/duda/ -I/opt/PrismTech/Vortex_v2/Device/VortexOpenSpliceRTE/6.7.1p2/HDE/armv7at2_vfp_neon.WRlinux7_gcc/include -I/opt/PrismTech/Vortex_v2/Device/VortexOpenSpliceRTE/6.7.1p2/HDE/armv7at2_vfp_neon.WRlinux7_gcc/include/dcps/C/SAC -I/opt/PrismTech/Vortex_v2/Device/VortexOpenSpliceRTE/6.7.1p2/HDE/armv7at2_vfp_neon.WRlinux7_gcc/include/sys -I/opt/PrismTech/Vortex_v2/Device/VortexOpenSplice/6.7.1p1/HDE/x86_64.linux/include -I/opt/PrismTech/Vortex_v2/Device/VortexOpenSplice/6.7.1p1/HDE/x86_64.linux/include/sys -I/opt/windriver/wrlinux-small/7.0-xxxxx-3543dr/sysroots/armv7at2-vfp-neon-wrs-linux-gnueabi/usr/include -I/opt/windriver/wrlinux-small/7.0-xxxxx-3543dr/sysroots/armv7at2-vfp-neon-wrs-linux-gnueabi/usr/include/c++ -I/opt/windriver/wrlinux-small/7.0-xxxxxx-3543dr/sysroots/armv7at2-vfp-neon-wrs-linux-gnueabi/usr/include/c++/4.9.1 -I/opt/windriver/wrlinux-small/7.0-xxxxxx-3543dr/sysroots/armv7at2-vfp-neon-wrs-linux-gnueabi/usr/include/c++/4.9.1/arm-windriverv7atneon-linux-gnueabi -I/opt/windriver/wrlinux-small/7.0-xxxxx-3543dr/sysroots/armv7at2-vfp-neon-wrs-linux-gnueabi/usr/include/c++/4.9.1/backward -I/opt/windriver/wrlinux-small/7.0-xxxxx-3543dr/sysroots/armv7at2-vfp-neon-wrs-linux-gnueabi/usr/include/dtc -I/opt/windriver/wrlinux-small/7.0-xxxxxx-3543dr/sysroots/x86_64-wrlinuxsdk-linux/usr/lib/arm-wrs-linux-gnueabi/gcc/arm-wrs-linux-gnueabi/4.9.1/include -I/opt/windriver/wrlinux-small/7.0-xxxxx-3543dr/sysroots/x86_64-wrlinuxsdk-linux/usr/lib/arm-wrs-linux-gnueabi/gcc/arm-wrs-linux-gnueabi/4.9.1/include-fixed


OBJECTS = main.o

_PATH     = $(patsubst /%, %, $(CURDIR))
_CC       = @/bin/echo -e "  [\033[33mCC\033[0m]   $@"; $(CC)
_DD       = @/bin/echo -e "  [\033[32mDD\033[0m]   $@"; $(CC)
_CC_QUIET = @/bin/echo -n; $(CC)

all: $(NAME).duda

$(NAME).duda: $(OBJECTS)
    $(_DD) $(CFLAGS) $(DEFS) -shared -o $@ $^ -lc $(LDFLAGS)

.c.o:
    $(_CC) -c $(CFLAGS) $(DEFS) $(INCDIR) -fPIC $<
    $(_CC_QUIET) -MM -MP $(CFLAGS) $(DEFS) $(INCDIR) $*.c -o $*.d > /dev/null &2>&1

clean:
    rm -rf *.o *.d *~ $(NAME).duda

我如何解决这个问题? 感谢

2 个答案:

答案 0 :(得分:0)

在链接期间,您指定了不在标准路径中的库

解决方案

  • 静态链接
  • 使用LD_LIBRARY_PATH
  • 使用LD_PRELOAD
  • 使用rpath

答案 1 :(得分:0)

我尝试使用rpath就像这样但得到了同样的错误:

  

CFLAGS = -g -Wall -DDEBUG -L / opt / PrismTech / Vortex_v2 / Device / VortexOpenSpliceRTE / 6.7.1p2 / HDE / armv7at2_vfp_neon.WRlinux7_gcc / lib -Wl,-rpath,/ opt / PrismTech / Vortex_v2 / Device / VortexOpenSpliceRTE / 6.7.1p2 / HDE / armv7at2_vfp_neon.WRlinux7_gcc / lib -ldcpssac -ldcpsisocpp2