gcc的编译选项有顺序吗?

作者:用户 来源:互联网 浏览:370 次 时间:2016-10-04 11:20:09

gcc编译

gcc的编译选项有顺序吗? - 摘要: gcc的编译选项有顺序吗?我在写一个测试动态链接库的时候,碰到一个问题。比如,现在我的目录是这个样子的:.├──libtest.so├──main.c├──main.o├──test.c└──test

问题描述

gcc的编译选项有顺序吗?

我在写一个测试动态链接库的时候,碰到一个问题。比如,现在我的目录是这个样子的:
.
├── libtest.so
├── main.c
├── main.o
├── test.c
└── test.h

main.c
#include
#include ""test.h""

int main()
{
print_hello();

return 0;
}

其中,libtest.so是test.c和test.h编译出来的动态链接库。然后我需要再main.c中引用这个库,main.o是已经编译
出来的对象,然后我用了下面的语句:
gcc -L. -ltest -o main main.o
但是报错:main.o: In function main':
main.c:(.text+0x7): undefined reference to
print_hello'
collect2: error: ld returned 1 exit status

print_hello是libtest.so提供的接口,为什么会找不到呢?明明已经链接了。
于是,我换了一下gcc的编译选项的顺序,这样写:
gcc main.o -o main -L. -ltest
把链接libtest.so放在后面就可以了,难道gcc的编译选项是有顺序要求的吗?
官方也没有说这些啊,网上也没有相关的问题

解决方案

会有一些顺序,可以看官方文档

解决方案二:

有顺序,上层的要放在前面,越靠底层越往后放

【云栖快讯】青年们,一起向代码致敬,来寻找第83行吧,云栖社区邀请大神彭蕾、多隆、毕玄、福贝、点评Review你的代码,参与互动者将选取50位精彩回复赠送“向代码致敬”定制T恤1件,最终成为“多隆奖”的小伙伴还将获得由阿里巴巴提供的“多隆奖”荣誉证书和奖杯。  详情请点击
云栖社区(yq.aliyun.com)为您免费提供gcc的编译选项有顺序吗?相关信息,包括 gcc编译 的信息 ,所有gcc的编译选项有顺序吗?相关内容均不代表云栖社区的意见! 该页面h5页面的地址是:https://m.aliyun.com/yunqi/wenzhang/show_92493,您可以点击gcc的编译选项有顺序吗?-手机站访问。
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一

云服务器9.9元/月,大学必备

热点导航