【问题标题】:arm gcc linker undefined referencearm gcc 链接器未定义的引用
【发布时间】:2017-06-19 10:27:35
【问题描述】:

我正在使用我在 github 上找到的 code。 为了使用uspi库,帮助文档(使用部分)说我应该创建一个makefile并在那里指定包含和库文件。 因为我是 makefile 概念的新手,所以我首先尝试手动输入:

arm-linux-gnueabihf-gcc -O0 -DRPI2 -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7-a -mtune=cortex-a7 -std=c99 -I./uspi/env/include -I./uspi/include -L./uspi/lib -luspi w.o -o kernel.elf

出现这个错误:

w.o: In function `main':
w.c:(.text+0xc): undefined reference to `USPiEnvInitialize'
w.c:(.text+0x24): undefined reference to `USPiInitialize'
w.c:(.text+0x48): undefined reference to `LogWrite'
w.c:(.text+0x4c): undefined reference to `USPiEnvClose'
w.c:(.text+0x58): undefined reference to `USPiMassStorageDeviceAvailable'
w.c:(.text+0x80): undefined reference to `LogWrite'
w.c:(.text+0x84): undefined reference to `USPiEnvClose'
w.c:(.text+0xb8): undefined reference to `USPiMassStorageDeviceRead'
w.c:(.text+0xdc): undefined reference to `LogWrite'
w.c:(.text+0x108): undefined reference to `LogWrite'
w.c:(.text+0x124): undefined reference to `LogWrite'
w.c:(.text+0x13c): undefined reference to `LogWrite'
w.c:(.text+0x204): undefined reference to `LogWrite'
w.c:(.text+0x23c): undefined reference to `USPiEnvClose'
collect2: error: ld returned 1 exit status

我需要 .elf 文件,所以我可以从中生成一个 .img 文件

【问题讨论】:

  • 如果你在w.o 之后添加-luspi ? (注意需要自己实现uspios.h中声明的函数,比如LogWrite)
  • 不走运我的朋友,同样的错误
  • 我不相信你。如果你仍然得到一个未定义的引用,例如USPiEnvClose,还有一些我们没有任何信息的错误。库本身是否正确构建,(在实现之前,您将获得对 LogWrite() 的未定义引用)
  • 实现在uspios.h中声明的函数
  • 你的意思是实现'w.c'程序中的功能?

标签: makefile linker arm undefined-reference


【解决方案1】:

此链接顺序:

arm-linux-gnueabihf-gcc ... -luspi w.o -o kernel.elf

不正确。库应该跟随它们被引用的对象:

arm-linux-gnueabihf-gcc ... w.o -luspi -o kernel.elf

Explanation.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2019-05-05
    • 2013-10-26
    • 2012-09-04
    • 2013-12-19
    • 2021-04-02
    • 2013-04-01
    相关资源
    最近更新 更多