如何使用 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。如何修复我的脚本?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)