当前位置: 技术问答>linux和unix
mips-linux下makefile问题!比较复杂的
来源: 互联网 发布时间:2016-07-17
本文导语: 下面是我makefile的文件,比较长,请大家耐心看看,实在没办法了所以上来求助大家,谢谢!! 我的makefile最后是要生成一个libnscrtv-hfcems-cbat-mib.a的静态库,这里面用到了mips设备的API,我在其中的一个.c源文件中加入...
下面是我makefile的文件,比较长,请大家耐心看看,实在没办法了所以上来求助大家,谢谢!!
我的makefile最后是要生成一个libnscrtv-hfcems-cbat-mib.a的静态库,这里面用到了mips设备的API,我在其中的一个.c源文件中加入了一个mips设备的函数,并且在最开始包含了这个函数对应的头文件!也在makefile中将整个API的头文件包含进来了,但最后报的错误是我加的这个函数没有定义!所以很奇怪,不知道从哪下手了,请大家帮忙看看,不胜感激了!!!
报错是:src/oamoperationinstru.c:75:undefined reference to "clbCnuVerGet"
我的makefile最后是要生成一个libnscrtv-hfcems-cbat-mib.a的静态库,这里面用到了mips设备的API,我在其中的一个.c源文件中加入了一个mips设备的函数,并且在最开始包含了这个函数对应的头文件!也在makefile中将整个API的头文件包含进来了,但最后报的错误是我加的这个函数没有定义!所以很奇怪,不知道从哪下手了,请大家帮忙看看,不胜感激了!!!
报错是:src/oamoperationinstru.c:75:undefined reference to "clbCnuVerGet"
# ------------- Directory path for source files -------------
SRC_DIR=src
# ------------- Directory Path for header files -------------
MIB_HDR_DIR=include
SYSTEM_HDR_DIR=../../source/system/include
SNMP_HDR_DIR=../../source/protocols/snmp/include
CMU_HDR_DIR=../../source/protocols/snmp/include/cmu
ACL_HDR_DIR=../../source/protocols/snmp/include/acl
SNMPV3_HDR_DIR=../../source/protocols/snmp/include/snmpv3
SNMPV3_SEC_HDR_DIR=../../source/protocols/snmp/include/snmpv3/security
ACL_HDR_DIR=../../source/protocols/snmp/include/acl
UTILS_HDR_DIR=../../source/utils/include
MAIN_HDR_DIR=../../source/main/include
NSCRTVROOT_HDR_DIR=../nscrtv-root/include
OPLAN_HDR_DIR=../OPlanLib/include //这里是mips设备的API头文件所在为止,我包含进来了,clbCnuVerGet这个函数的头文件也在这个目录下
# ------------- Directory Path for library files -------------
LIB_DIR=lib
# ------------- Directory Path for object files -------------
OBJ_DIR=objs
# ------------- Directory Path for binary files -------------
BIN_DIR=bin
# ------------- Include directories -------------------
INC= -I$(MAIN_HDR_DIR) -I$(SNMP_HDR_DIR) -I$(CMU_HDR_DIR) -I$(SYSTEM_HDR_DIR) -I$(MIB_HDR_DIR) -I$(UTILS_HDR_DIR) -I$(ACL_HDR_DIR) -I$(SNMPV3_HDR_DIR) -I$(SNMPV3_SEC_HDR_DIR) -I$(NSCRTVROOT_HDR_DIR) -I$(OPLAN_HDR_DIR) //加头文件加到整个文件的包含中。
# ------------- Other Included Libraries -------------------
OTHER_INC=-lpthread
# ------------- Compiler to compile source files ------------
COMPILER=mips-linux-uclibc-gcc //mips的gcc
# ------------- Compiler options -------------
COMP_OPT=-c -g -Wall -fno-strict-aliasing -O -O2 -o $@ //mips-gcc的编译参数
# ------------- Agent options -------------
SRC_OPT=-DUNIX
# ----------- Library utility to create library ---------
LIB_NAME=mips-linux-uclibc-ar //mips的ar,用于生成.a的静态库
# -------------- Library utility Options -------------
LIB_OPT=-cr //mips-ar的编译参数
# ------------- Library file extension -------------
LIB_EXT=a
# ------------- Object file extension -------------
OBJ_EXT=o
//这里的头文件我只给出了一部分,由于太长了。这里的头文件没错
# ------------- Module header files -------------
MIB_HDRS= $(MIB_HDR_DIR)/oamoperation.h
$(MIB_HDR_DIR)/vlanidadddeltable.h
$(MIB_HDR_DIR)/vlanidsubtable.h
$(MIB_HDR_DIR)/accessl2.h
$(MIB_HDR_DIR)/qos.h
$(MIB_HDR_DIR)/dba.h
//对应的.c文件最后生成的.o目标文件
# ------------- Module object files -------------
MIB_OBJS= $(OBJ_DIR)/oamoperationhdlr.$(OBJ_EXT)
$(OBJ_DIR)/oamoperationinstru.$(OBJ_EXT)
$(OBJ_DIR)/oamoperationftov.$(OBJ_EXT)
$(OBJ_DIR)/vlanidadddeltablehdlr.$(OBJ_EXT)
$(OBJ_DIR)/vlanidadddeltableinstru.$(OBJ_EXT)
$(OBJ_DIR)/vlanidadddeltableftov.$(OBJ_EXT)
$(OBJ_DIR)/vlanidsubtablehdlr.$(OBJ_EXT)
//这里生成最终的.a文件,我最后要生成libnscrtv-hfcems-cbat-mib.a这样的文件
# -------------Compilation starts here-------------
all: $(LIB_DIR)/libnscrtv-hfcems-cbat-mib.$(LIB_EXT)
$(LIB_DIR)/libnscrtv-hfcems-cbat-mib.$(LIB_EXT): $(MIB_OBJS) $(MIB_HDRS)
$(LIB_NAME) $(LIB_OPT) $(LIB_DIR)/libnscrtv-hfcems-cbat-mib.$(LIB_EXT) $(MIB_OBJS)
//编译源文件,我只给出部分,这里也没问题
# ------------- Compilation commands -------------
#Compile...
$(OBJ_DIR)/oamoperationhdlr.$(OBJ_EXT): $(SRC_DIR)/oamoperationhdlr.c $(MIB_HDRS)
$(COMPILER) $(COMP_OPT) $(SRC_OPT) $(INC) $(SRC_DIR)/oamoperationhdlr.c
$(OBJ_DIR)/oamoperationinstru.$(OBJ_EXT): $(SRC_DIR)/oamoperationinstru.c $(MIB_HDRS)
$(COMPILER) $(COMP_OPT) $(SRC_OPT) $(INC) $(SRC_DIR)/oamoperationinstru.c
|
clbCnuVerGet 这个函数未定义
如果是你自己写的函数, 在 x.c 文件中, 那么要保证最终链接生成 .a 文件时, 一起链接 x.o 文件
如果不是你写的, 找到它是在哪里定义的, 如果是在一个库中定义的, 链接时也要链接那个库
希望你能找到原因
如果是你自己写的函数, 在 x.c 文件中, 那么要保证最终链接生成 .a 文件时, 一起链接 x.o 文件
如果不是你写的, 找到它是在哪里定义的, 如果是在一个库中定义的, 链接时也要链接那个库
希望你能找到原因
|
undefined reference 很可能是因为你没有链接需要的库
你用到了 mips 设备的API, 在最开始包含对应的头文件是不够的, 还有链接一个类似 libmips 的库(我没用过 mips, 不知道具体需要那个库)
COMP_OPT=-c -g -Wall -fno-strict-aliasing -lmips -O -O2 -o $@ //mips-gcc的编译参数
查查手册找到库的名称是什么
你用到了 mips 设备的API, 在最开始包含对应的头文件是不够的, 还有链接一个类似 libmips 的库(我没用过 mips, 不知道具体需要那个库)
COMP_OPT=-c -g -Wall -fno-strict-aliasing -lmips -O -O2 -o $@ //mips-gcc的编译参数
查查手册找到库的名称是什么
|
没有仔细看,路径有设对吗
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。