0

我是来自巴西的电子工程专业学生,目前正在研究嵌入式系统。

我正在尝试将名为 minimp3 的 MP3 解码器(用 C 语言编写)移植到借助 SoCLib 工具构建的平台(该工具有一堆硬件模型,如处理器、存储器和互连都用 SystemC 女巫编写允许您构建嵌入式系统模型)。

我正在构建的平台由 MIPS 处理器、RAM、互连和 TTY(虚拟终端)组成,因此显然 MP3 解码器必须交叉编译。

这个 MP3 解码器使用了一些没有在 SoCLib 工具中实例化的 C 标准库(witch 只包含 stdio.h 和 stdlib.h)。

我首先尝试在不对 SoCLib 工具提供的 makefile 进行任何更改的情况下运行我的平台。有了这个,当我输入“make”命令时,我收到了以下消息(以及其他相同类型的消息):

undefined reference to `tan'

undefined reference to `sin'

undefined reference to `cos'

undefined reference to `memset'

undefined reference to `realloc'

undefined reference to `open'

undefined reference to `strlen'

研究这个错误,我发现这可能是因为链接器没有链接 C 头文件,所以我在 makefile 上添加了以下命令(强调):

CFLAGS=-Wall -O2 -I. $(ADD_CFLAGS) $(DEBUG_CFLAGS) $($(ARCH)_CFLAGS) -ggdb -I$(COMMON) **-I/usr/include** $(INTERFACE_CFLAGS) 

mipsel-unknown-elf-ld -q $($(ARCH)_LDFLAGS) $(ADD_LDFLAGS) -o $@ $(filter %.o,$^) **-lm** -T $(filter %ldscript,$^) $(LIBGCC)*

但是,再次输入“make”命令,我得到了以下错误:

mipsel-unknown-elf-ld: cannot find -lm

而现在我不知道该怎么办。

谁能帮我?

4

1 回答 1

0

输入“make”命令时,出现以下错误:

mipsel-unknown-elf-ld:找不到-lm

“mipsel-unknown-elf-”表示您正在使用 mips 交叉编译器,并为“ld”链接器加载器命令添加前缀。-lm 选项表示链接(“-l”部分)“m”库,拼写为“libm.a”或“libm.so”。这意味着 make 编译了您的代码,现在正在尝试将您的目标文件与“libm”库链接。

有关更多信息,请参阅此链接,

C 编译器如何发现 -lm 指向文件 libm.a?

你现在要做的是告诉你的链接器加载器搜索你的库的路径,这意味着你需要找到“libm.a”和/或“libm.so”,以及你计划的其他库使用“lib*.a”和“lib*.so*”。确定您需要的路径,然后使用“-L 路径”选项添加这些库搜索路径。

现在你知道该怎么做了。-查克

于 2013-05-21T21:41:30.910 回答