簡體   English   中英

使用 GCC 鏈接到 static 庫時遇到問題

[英]Having trouble linking to a static library with GCC

我正在使用glfw進行一個大項目,但我一直在嘗試使用 gcc 鏈接到 static 庫,因此這個玩具示例受到了阻礙。 我不知道為什么我在這么簡單的事情上遇到這么多麻煩。

這是我的源代碼的范圍:

#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 Mint。 我下載了 FreeType 庫並使用 CMake 和我的 GCC 版本構建它。 libfretype.a文件位於名為junk的子目錄中。 標頭位於名為include的子目錄中。

我們用以下代碼編譯它:

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

我得到了大量的錯誤,比如sfnt.c:(.text+0x218): undefined reference to 'png_get_error_ptr'

提前感謝您告訴我我犯的愚蠢錯誤。

這基本上意味着缺少 function png_get_error_ptr的實現。 因此,編譯器無法生成可執行文件,因為缺少某些代碼。

function png_get_error_ptr在名為libpng的庫中實現。 有時,某些庫對另一個項目有一些依賴項,在一般情況下,您需要將所有依賴項包含到您的構建中以解決linker errors

您需要在 linker 中包含這些庫:

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

-lz是與zlib鏈接,因為如果我沒記錯的話, libpng依賴於zlib

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM