当前位置:  技术问答>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"

# ------------- 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 文件
如果不是你写的, 找到它是在哪里定义的, 如果是在一个库中定义的, 链接时也要链接那个库
希望你能找到原因

|
undefined reference 很可能是因为你没有链接需要的库
你用到了 mips 设备的API, 在最开始包含对应的头文件是不够的, 还有链接一个类似 libmips 的库(我没用过 mips, 不知道具体需要那个库)

COMP_OPT=-c -g -Wall -fno-strict-aliasing -lmips -O -O2 -o $@   //mips-gcc的编译参数

查查手册找到库的名称是什么

|
没有仔细看,路径有设对吗

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3