钱吉 2015-06-28 01:59 采纳率: 0%
浏览 2485

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的编译选项是有顺序要求的吗?
官方也没有说这些啊,网上也没有相关的问题

  • 写回答

2条回答

  • oyljerry 2015-06-28 03:21
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘