4

我正在尝试在我的应用程序中使用libjpeg。制作项目会在 .libs 文件夹中生成一个 libjpeg.a。我想做的是在链接阶段使用这个文件。我尝试了以下方法:我将 libjpeg.a 复制到了我的 C 代码所在的文件夹中。试图与

gcc libjpeg.a mycode.c -o executable_name

失败。如果我执行 gcc -ljpeg mycode.c,当我将标题更改为指向而不是“libjpeg.h”时,编译成功,但这显然链接到库的系统范围动态版本。

尝试与相对或绝对路径链接也失败:

gcc ./libjpeg.a mycode.c -o executable_name

我也尝试过静态选项:

gcc -static libjpeg.a mycode.c -o executable_name

链接器错误如下:

Linking...
gcc -std=c99 -Wall -Wextra -g -pedantic ./libjpeg.a ./libjpeg.a -lm obj/read_jpeg.o obj/utils.o -o test_jpeg
obj/read_jpeg.o: In function `read_JPEG_file':
/home/ustun/Downloads/jpeg_test/read_jpeg.c:37: undefined reference to `jpeg_std_error'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:45: undefined reference to `jpeg_CreateDecompress'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:46: undefined reference to `jpeg_stdio_src'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:47: undefined reference to `jpeg_read_header'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:48: undefined reference to `jpeg_start_decompress'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:62: undefined reference to `jpeg_read_scanlines'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:74: undefined reference to `jpeg_finish_decompress'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:75: undefined reference to `jpeg_destroy_decompress'
obj/read_jpeg.o: In function `read_JPEG_file_props':
/home/ustun/Downloads/jpeg_test/read_jpeg.c:93: undefined reference to `jpeg_std_error'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:100: undefined reference to `jpeg_CreateDecompress'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:101: undefined reference to `jpeg_stdio_src'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:102: undefined reference to `jpeg_read_header'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:103: undefined reference to `jpeg_start_decompress'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:113: undefined reference to `jpeg_read_scanlines'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:116: undefined reference to `jpeg_finish_decompress'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:117: undefined reference to `jpeg_destroy_decompress'
collect2: ld returned 1 exit status
make: *** [test_jpeg] Error 1

您可以在此处下载带有 Makefile 的简单项目。

4

3 回答 3

5

libjpeg.a如果您在相对于编译位置的 .libs 文件夹中有 libjpeg.a,则必须提供完整路径:

gcc  mycode.c -o executable_name .libs/libjpeg.a

如果您的特殊 libjpeg.a 在其他地方,请给出它的完整路径。

如果失败,您必须告诉我们会发生什么。(细节很重要,所以请复制粘贴确切的错误和运行的确切命令行)。

于 2011-09-22T09:40:35.913 回答
1

您需要使用-static:

gcc -static -o exec_name mycode.c -ljpeg

无需复制存档 (.a)。你可以通过阅读 man ld 找到答案。

于 2011-09-22T09:40:11.123 回答
0

如果您遇到与我相同的问题,这可能会对您有所帮助。在我的系统中,我有

libjpeg.so.62 -> libjpeg.so.62.0.0 libjpeg.so.62.0.0

添加符号链接后:

sudo ln -s libjpeg.so.62 libjpeg.so

我的问题得到了解决。

于 2016-08-12T22:23:05.177 回答