c - Makefile链接器无法在静态库中找到函数

标签 c makefile linker

很抱歉这个问题看起来微不足道,但我看了一些教程和SO问题,仍然无法找出问题所在。

无论如何,当使用 gcc 时,链接器无法在我包含的静态库中找到函数。

错误消息:

arm-none-linux-gnueabi-gcc -I. -I./include yuv.c -c -o yuv.o
arm-none-linux-gnueabi-gcc -I. -I./include main.c -c -o main.o
arm-none-linux-gnueabi-gcc -L./lib -I. -I./include yuv.o main.o -lpthread -lrt -ljpeg -o grab.elf
main.o: In function `jpegWrite':
main.c:(.text+0x118): undefined reference to `jpeg_std_error'
main.c:(.text+0x134): undefined reference to `jpeg_CreateCompress'
main.c:(.text+0x144): undefined reference to `jpeg_stdio_dest'
main.c:(.text+0x17c): undefined reference to `jpeg_set_defaults'
main.c:(.text+0x198): undefined reference to `jpeg_set_quality'
main.c:(.text+0x1a8): undefined reference to `jpeg_start_compress'
main.c:(.text+0x1e4): undefined reference to `jpeg_write_scanlines'
main.c:(.text+0x200): undefined reference to `jpeg_finish_compress'
main.c:(.text+0x20c): undefined reference to `jpeg_destroy_compress'
collect2: ld returned 1 exit status
make: *** [grab.elf] Error 1

我的文件结构如下:

生成文件

main.c

  • 在lib文件夹中

  • libjpeg.a

我的 Makefile 内容如下:

GCC=gcc

INC_PATH= -I. -I./include

LIBS_PATH = -L./lib

HEADER_FILE=./yuv.h ./include/jpeglib.h

grab.elf: yuv.o main.o
    $(CROSS_COMPILE)$(GCC) $(LIBS_PATH) $(INC_PATH) yuv.o main.o -lpthread -lrt -ljpeg -o grab.elf

yuv.o:yuv.c $(HEADER_FILE)
    $(CROSS_COMPILE)$(GCC) $(INC_PATH) yuv.c -c -o yuv.o

main.o:main.c $(HEADER_FILE)
    $(CROSS_COMPILE)$(GCC) $(INC_PATH) main.c -c -o main.o

我也尝试过:

nm libjpeg.a | grep jpeg_std
000001f0 T _jpeg_stdio_dest
00000140 T _jpeg_stdio_src
000001f0 T _jpeg_std_error
000012c0 R _jpeg_std_message_table

有好心人愿意帮助我吗?谢谢。

最佳答案

难道libjpeg.a是在你开发的平台上编译的,而grab.elf的目标是不同的?即,您正在 x86 环境上进行开发并针对 ARM?

关于c - Makefile链接器无法在静态库中找到函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29596559/

相关文章:

linux - 每条规则的运行时间

c++ - Visual Studio 在编译 32 位时尝试使用 64 位 C 运行时库

ios - MonoTouch 第 3 方库适用于 4.2 但不适用于 5.0

c++ - 如何使 Visual C++ 9 不发出实际上从未调用过的代码?

调用二维数组函数?

c - 如何使用 gcov 对动态库进行单元测试?

C - 非左值数组的无效使用

c - 扩展动态链接共享库?

makefile - 从 Makefile 中的路径名中获取子字符串

c - 编写 Makefile 以从 C 程序生成修改后的、汇编的、可重定位的和可执行文件