当前位置:  技术问答>linux和unix

linux通过makefile编译静态链接库,有问题求解?

    来源: 互联网  发布时间:2016-09-17

    本文导语:  在一个工程里已经能够编译好了, 现在要把这几个tinyxml.o tinyxmlparse.o  tinyxmlerror.o tinystr.o 这几个文件封装成静态库  ar cr tingxml.a tingxml.o    ar cr......... 在Makefile 模仿其他地方加静态库的形式  INCLUDE_DIR+=-I$...

在一个工程里已经能够编译好了, 现在要把这几个tinyxml.o tinyxmlparse.o  tinyxmlerror.o tinystr.o 这几个文件封装成静态库  ar cr tingxml.a tingxml.o    ar cr.........

在Makefile 模仿其他地方加静态库的形式 
INCLUDE_DIR+=-I$(GUI_DIR)/include
STATIC_LIB_LIST+=$(PROJECT_ROOT)/objects/tinystr.a $(PROJECT_ROOT)/objects/tinyxml.a $(PROJECT_ROOT)/objects/tinyxmlerror.a $(PROJECT_ROOT)/objects/tinyxmlparser.a
路径已经核对过了

下面makefile是这样处理的
#增加公共的库
STATIC_LIB_PATH+=
STATIC_LIB_LIST+=
CFLAGS+=$(INCLUDE_DIR)
LDFLAGS+=$(STATIC_LIB_LIST)
DEPFILE:=$(PROJECT_ROOT)/deps

.PHONY:all
all:$(DEPFILE) $(EXE_NAME)

$(DEPFILE): $(PROJECT_SRC) Makefile
@echo "Generating new dependency file...";
@-rm -f $(DEPFILE)
@for f in $(PROJECT_SRC); do 
OBJ=$(OBJECTS_DIR)/`basename $$f|sed -e 's/.cpp/.o/' -e 's/.c/.o/'`; 
          echo $$OBJ: $$f>> $(DEPFILE); 
          echo ' $(CC) $$(CFLAGS)  -c -o $$@ $$^'>> $(DEPFILE); 
        done

-include $(DEPFILE)

$(EXE_NAME):$(OBJECT_FILE)
# make -C ./filemanage
$(CC) $(CFLAGS) $(OBJECT_FILE) -o "$@" $(LDFLAGS) -L$(LIBS)

我把之前链接的这几个注释掉
#OBJECT_FILE+=$(OBJECTS_DIR)/tinystr.o
#OBJECT_FILE+=$(OBJECTS_DIR)/tinyxml.o
#OBJECT_FILE+=$(OBJECTS_DIR)/tinyxmlerror.o
#OBJECT_FILE+=$(OBJECTS_DIR)/tinyxmlparser.o

再编译后出错了/home/wujianhong/app/common/objects/tinyxmlparser.a(tinyxmlparser.o): In function `TiXmlDocument::SetError(int, char const*, TiXmlParsingData*, TiXmlEncoding)':
tinyxmlparser.cpp:(.text+0xfdc): undefined reference to `TiXmlBase::errorString'
collect2: ld returned 1 exit status
make: *** [/home/wujianhong/app/common/../user/release/hisilicon_app_dvr] 错误 1

有人帮忙吗,再提供信息

|
将静态库的文件名前面加上lib
例如:
ar cr tingxml.a tingxml.o
改成
ar cr libtingxml.a tingxml.o

|
虽然一般来说linux下库要加前缀lib,
但从错误提示来看并不是这个原因。因为并不是说找不到库,而是说库内的函数定义找不到。
所以除非代码本身的错误的话,这应该是库的链结顺序引起的。楼主要保证最基本的库放在最右边。

|
和动态库加载方法一样试试 -L$(PROJECT_ROOT)/objects/ -ltinystr

    
 
 

您可能感兴趣的文章:

  • 求解windows下硬盘安装linux如何用linux引导
  • Linux Shell编程从初学到精通 第四章课后习题2 求解
  • linux命令求解释....
  • 求助linux下mysql 求解!
  • 关于linux shell的一个不明白的地方。求解
  • 高分求解:win2000访问linux
  • linux 内核一条语句求解
  • 小弟求解LINUX下SHELL编程问题
  • LINUX如何取进程信息,求解!!!
  • linux切换用户遇到的问题,求解!
  • linux上的媒体播放(高分在线求解)
  • 求解linux的网络设置
  • vmware linux分区问题--求解
  • 关于linux分区的问题~~~~大伙给个主意~~~40分求解
  • 急急急!!!高分求解linux 2.6 内核安装网卡的问题
  • 求解此linux命令意思~~~!!!!!!!
  • linux grep 正则表达式 求解释
  • 菜鸟求解linux 信号问题
  • 小弟没写过shell,求解 linux shell 命令
  • 秒爆,求教育,求解释,linux 的select()函数
  • linux中静态链接库调用了另一个静态链接库
  • linux 生成静态库的时候怎么连接别的静态库
  • 请问在LINUX下怎么设置静态IP?我在虚拟机中不能设置静态IP怎么办?
  • Linux 动态库,静态库的一些疑惑
  • linux 静态库 makefile 相关问题
  • 送分.......linux下动态库和静态库的后缀名是什么呢?
  • 请问unix/linux下动态连接库和静态连接库有什么区别?
  • Linux下gcc编译时,如何以静态链接的形式编译?
  • linux中,动态库中的函数如何调用静态库中的函数
  • LINUX下的静态库编译链接问题
  • 动态库与静态库在linux与windows下的调用??
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux/centos源码安装nginx编译配置选项参数介绍
  • 嵌入式linux开发:一段代码在windows平台用VC编译运行正常,在linux平台用gcc编译运行正常,但是用arm-linux-gcc编译在嵌入式板子上运行就不正常.
  • linux 64位编译出错。linux 32位可以编译过。
  • 关于在linux交叉编译powerpc-e300c3-linux-gcc的编译问题
  • linux下有没有能编译出16bit代码的C语言编译器?
  • 现要在一台Pentium100上安装LINUX操作系统,能不能不选用别的品牌的LINUX,而直接用内核编译,然后再加上编译器和SHELL等等其它东西?如
  • linux下可以编译c但是如何编译c++
  • arm-linux-gcc交叉编译出错,但gcc编译没错,什么原因呢???
  • 谁编译过PLX9054 Linux的驱动程序,我给100分教我编译和安装??
  • 何处有 Linux 内核编译配置详细的中文介绍? 我在重新配置编译时老是出错:-(
  • 想问一下,编译LINUX内核时,是否可以只编译其中的一个模块?
  • 在linux下用proc编译程序,'*.pc'文件编译后成了'*.c?',多了一个问号?
  • 请问在linux下编译程序怎么设置编译器字节对齐?
  • linux下g++怎么编译啊?我怎么编译不过去呢?
  • [提问]Linux下如何把多个.a文件编译一个.so文件,或者把多个.so文件编译成一个.so文件
  • 有人说用vc++写的程序,代码可以直接拿到linux下找编译器,就可以编译,是真的吗?
  • 在linux+x86下用交叉编译器编译出能在solaris+x86运行的文件时遇到的问题
  • linux内核编译一定要在linux环境下么?
  • 书写基于Linux内核的键盘记录器(Writing Linux Kernel Keylogger)中的源码如何编译通过???
  • 菜鸟问题: redhat linux 编译一个最简单的c程序, 其中包含了<studio.h>头文件,但在gcc编译时,提示找不到studio.h文件,请问各位大大
  • 如何查看程序被哪个版本编译器编译的linux-gcc
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


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

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

    浙ICP备11055608号-3