多文件编译中 undefined reference to 库函数问题

undefined reference to是一个非常普遍的问题,而且出现这种提示之后有很多的原因。但是碰到的一个问题却非常诡异。核心问题就是多文件连接时的顺序问题!

我是进行多文件编译,调用了两个开源库函数。我在我自己的虚拟机上的Fedora系统上能够编译连接通过并顺利执行,但是切换到Ubuntu系统的时候,各个文件单独编译能够编译通过,但是把各个目标文件连接成可执行文件的时候却报错,undefined reference to所有的引用的库函数。

于是我搜索了各种相关问题的原因,并一遍一遍地尝试,最终在调整了连接命令的顺序之后在Ubuntu上连接通过。我的Makefile文件中连接生成可执行文件命令如下:

$(CC) $(CFLAGS) -I$(INCLUDEX) -I$(INCLUDEH) -L$(LOCAL) $(LIB) $(OBJECTS) -o s3

这在Fedora下能够连接正确;但是在Ubuntu下报错。于是我修改成了如下语句:

$(CC) $(CFLAGS) -I$(INCLUDEX) -I$(INCLUDEH) -L$(LOCAL)  -o s3 $(OBJECTS)  $(LIB)

连接成功!

其中OBJECTS= object_response_header.o request_analysis.o  bucket_response_header.o delete_bucket.o xml.o container.o

我想这可能和Fedora以及Ubuntu的连接机制不同,仅供参考。

posted on 2013-04-08 20:32  joygpwan  阅读(426)  评论(0编辑  收藏  举报

导航