使用 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
如果我没记错的话。
我正在使用 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
如果我没记错的话。