使用 GCC 链接到静态库时遇到问题

Having trouble linking to a static library with GCC

我正在使用 glfw 进行一个大项目,但我一直在尝试使用 gcc link 到静态库,因此遇到了这个玩具示例。我不确定为什么这么简单的事情我会遇到这么多麻烦。

这是我源代码的范围:

#include <stdio.h>
#include <ft2build.h>
#include FT_FREETYPE_H 

int main(){
    FT_Library ft;
    if (FT_Init_FreeType(&ft))
    {
        printf("ERROR::FREETYPE: Could not init FreeType Library\n");
    }

    FT_Face face;
    if (FT_New_Face(ft, "fonts/arial.ttf", 0, &face))
    {
        printf("ERROR::FREETYPE: Failed to load font\n"); 
    }
    return 0;
}

我是 运行 Linux 薄荷。我下载了 FreeType 库并使用 CMake 和我的 GCC 版本构建了它。 libfretype.a 文件位于名为 junk 的子目录中。 headers 位于名为 include.

的子目录中

我们用以下内容编译它:

gcc -Wall -Wextra -g -v -Iinclude -Ljunk vex.c -lfreetype -o vex

而且我遇到了很多错误,例如 sfnt.c:(.text+0x218): undefined reference to 'png_get_error_ptr'

提前感谢您告诉我我犯的愚蠢错误。

基本上就是缺少函数png_get_error_ptr的实现。因此,编译器无法生成可执行文件,因为缺少某些代码。

函数 png_get_error_ptr 在名为 libpng 的库中实现。有时,一些库对另一个项目有一些依赖,在一般情况下,您需要将所有依赖项包含到您的构建中以解决 linker errors.

您需要将这些库包含在 linker:

gcc -Wall -Wextra -g -v -Iinclude -Ljunk vex.c -lfreetype -lpng -lz -o vex 
                                                           ^     ^

-lz 是 link 反对 zlib 因为 libpng 依赖 zlib 如果我没记错的话。

http://libpng.org/pub/png/libpng-manual.txt