链接库的静态版本而不是动态库

ust*_*tun 4 gcc libjpeg

我想在我的应用程序中使用libjpeg.使项目在.libs文件夹中生成libjpeg.a.我想要做的是在链接阶段使用此文件.我尝试了以下内容:我将libjpeg.a复制到我的C代码所在的文件夹中.试图链接

gcc libjpeg.a mycode.c -o executable_name
Run Code Online (Sandbox Code Playgroud)

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

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

gcc ./libjpeg.a mycode.c -o executable_name
Run Code Online (Sandbox Code Playgroud)

我也尝试过静态选项:

gcc -static libjpeg.a mycode.c -o executable_name
Run Code Online (Sandbox Code Playgroud)

链接器错误如下:

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
Run Code Online (Sandbox Code Playgroud)

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

nos*_*nos 5

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

gcc  mycode.c -o executable_name .libs/libjpeg.a
Run Code Online (Sandbox Code Playgroud)

如果您的特殊libjpeg.a位于其他地方,请提供完整的路径.

如果失败了,你必须告诉我们会发生什么.(详细信息很重要,因此请复制粘贴确切的错误和运行的确切命令行).

  • 静态(.a)库很重要.必须以与命令行相关的相反顺序指定它们.使用共享(.so)库,顺序无关紧要. (2认同)