首页 > 解决方案 > 如何使用 Premake5 链接已编译的 FreeType 库?

问题描述

我有以下 lua 脚本来编译并链接到我的项目 FreeType 库:

project "freetype"
    kind "StaticLib"
    language "C"
    staticruntime "on"
    warnings "off"
    
    targetdir ("bin/" .. outputdir .. "/%{prj.name}")
    objdir ("bin-int/" .. outputdir .. "/%{prj.name}")

    files
    {
        "src/autofit/autofit.c",
        "src/bdf/bdf.c",
        "src/cff/cff.c",
        "src/base/ftbase.c",
        "src/base/ftbitmap.c",
        "src/cache/ftcache.c",
        "src/base/ftfstype.c",
        "src/base/ftgasp.c",
        "src/base/ftglyph.c",
        "src/gzip/ftgzip.c",
        "src/base/ftinit.c",
        "src/lzw/ftlzw.c",
        "src/base/ftstroke.c",
        "src/base/ftsystem.c",
        "src/smooth/smooth.c",
        "src/base/ftbbox.c",
        "src/base/ftmm.c",
        "src/base/ftpfr.c",
        "src/base/ftsynth.c",
        "src/base/fttype1.c",
        "src/base/ftwinfnt.c",
        "src/base/ftlcdfil.c",
        "src/base/ftgxval.c",
        "src/base/ftotval.c",
        "src/base/ftpatent.c",
        "src/pcf/pcf.c",
        "src/pfr/pfr.c",
        "src/psaux/psaux.c",
        "src/pshinter/pshinter.c",
        "src/psnames/psmodule.c",
        "src/raster/raster.c",
        "src/sfnt/sfnt.c",
        "src/truetype/truetype.c",
        "src/type1/type1.c",
        "src/cid/type1cid.c",
        "src/type42/type42.c",
        "src/winfonts/winfnt.c",
        "src/sdf/**.h",
        "src/sdf/**.c",
        "include/ft2build.h",
        "include/freetype/config/ftconfig.h"
    }

    includedirs
    {
        "include"
    }

    defines
    {
        "_CRT_SECURE_NO_WARNINGS",
        "_LIB",
        "FT2_BUILD_LIBRARY"
    }
    
    filter "system:windows"
        systemversion "latest"

        files
        {
            "builds/windows/ftdebug.c"
        }

    filter "configurations:Debug"
        runtime "Debug"
        symbols "on"

    filter "configurations:Release"
        runtime "Release"
        optimize "on"

一切都可以正常编译(也可以使用 FreeType),但是当需要链接编译器时会产生以下输出:

usr/bin/ld: vendor/freetype/bin/Debug-linux-x86_64/freetype/libfreetype.a(sdf.o):(.data.rel.ro.local+0x40): multiple definition of `ft_sdf_renderer_class'; vendor/freetype/bin/Debug-linux-x86_64/freetype/libfreetype.a(ftsdfrend.o):(.data.rel.ro+0x0): first defined here
/usr/bin/ld: vendor/freetype/bin/Debug-linux-x86_64/freetype/libfreetype.a(sdf.o):(.data.rel.ro.local+0xc0): multiple definition of `ft_bitmap_sdf_renderer_class'; vendor/freetype/bin/Debug-linux-x86_64/freetype/libfreetype.a(ftsdfrend.o):(.data.rel.ro+0x80): first defined here
/usr/bin/ld: vendor/freetype/bin/Debug-linux-x86_64/freetype/libfreetype.a(smooth.o): in function `gray_convert_glyph_inner':
/home/laptok/Desktop/Snake/Snake/vendor/freetype/src/smooth/ftgrays.c:1609: undefined reference to `FT_Trace_Disable'
/usr/bin/ld: /home/laptok/Desktop/Snake/Snake/vendor/freetype/src/smooth/ftgrays.c:1612: undefined reference to `FT_Trace_Enable'
/usr/bin/ld: ../bin/Debug-linux-x86_64/Snake/Snake: hidden symbol `FT_Trace_Enable' isn't defined
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status

此 lua 脚本适用于 Visual Studio 2019 项目生成(它仍会产生类似的输出,但会链接),但它不适用于 Linux。如何修复我的脚本?

标签: linuxlinker-errorsc99freetypepremake

解决方案


推荐阅读