VScode+MSVC 在使用drawtext和outtextxy时出现LNK2005错误

0

同时链接EasyXw.lib和EasyXa.lib,不使用drawtext或outtextxy时可以正常编译。

但是使用这两个函数时会报链接错误,部分报错如下

cl.exe /Zi /EHsc /nologo kernel32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib User32.lib EasyXw.lib EasyXa.lib /FoF:\MSVC\game\chapter3\build\char /FdF:\MSVC\game\chapter3\build\char /FeF:\MSVC\game\chapter3\build\char.exe F:\MSVC\game\chapter3\char.cpp 

char.cpp
EasyXa.lib(EasyX.obj) : error LNK2005: "public: __cdecl FILLSTYLE::FILLSTYLE(class FILLSTYLE const &)" (??0FILLSTYLE@@QEAA@AEBV0@@Z) 已经在 EasyXw.lib(EasyX.obj) 中定义
EasyXa.lib(EasyX.obj) : error LNK2005: "public: __cdecl FILLSTYLE::FILLSTYLE(void)" (??0FILLSTYLE@@QEAA@XZ) 已经在 EasyXw.lib(EasyX.obj) 中定义  
EasyXa.lib(EasyX.obj) : error LNK2005: "public: __cdecl LINESTYLE::LINESTYLE(class LINESTYLE const &)" (??0LINESTYLE@@QEAA@AEBV0@@Z) 已经在 EasyXw.lib(EasyX.obj) 中定义
EasyXa.lib(EasyX.obj) : error LNK2005: "public: __cdecl LINESTYLE::LINESTYLE(void)" (??0LINESTYLE@@QEAA@XZ) 已经在 EasyXw.lib(EasyX.obj) 中定义
EasyXa.lib(EasyX.obj) : error LNK2005: "public: virtual __cdecl FILLSTYLE::~FILLSTYLE(void)" (??1FILLSTYLE@@UEAA@XZ) 已经在 EasyXw.lib(EasyX.obj) 中定义
EasyXa.lib(EasyX.obj) : error LNK2005: "public: virtual __cdecl LINESTYLE::~LINESTYLE(void)" (??1LINESTYLE@@UEAA@XZ) 已经在 EasyXw.lib(EasyX.obj) 中定义
EasyXa.lib(EasyX.obj) : error LNK2005: "public: class FILLSTYLE & __cdecl FILLSTYLE::operator=(class FILLSTYLE const &)" (??4FILLSTYLE@@QEAAAEAV0@AEBV0@@Z) 已经在 EasyXw.lib(EasyX.obj) 中定义

但是只链接EasyXa.lib时就没有报错,可以正常编译。我的task.json如下

{
    "tasks": [
        {
            "type": "shell",
            "label": "C/C++: cl.exe 生成活动文件",
            "command": "cl.exe",
            "args": [
                "/Zi",
                "/EHsc",
                "/nologo",
                "kernel32.lib",
                "gdi32.lib",
                "winspool.lib",
                "comdlg32.lib",
                "advapi32.lib",
                "shell32.lib",
                "ole32.lib",
                "oleaut32.lib",
                "uuid.lib",
                "odbc32.lib",
                "odbccp32.lib",
                "User32.lib",
                // "EasyXw.lib",
                "EasyXa.lib",
                "/Fo${fileDirname}\\build\\${fileBasenameNoExtension}",
                "/Fd${fileDirname}\\build\\${fileBasenameNoExtension}",
                "/Fe${fileDirname}\\build\\${fileBasenameNoExtension}.exe",
                "${file}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$msCompile"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}
ava
小猩猩

2023-7-22

1

你不能同时链接 EasyXa.lib 和 EasyXw.lib,否则必定出问题。

ava
慢羊羊

2023-7-24

我是按照别的教程做的这个配置。EasyXa.lib和EasyXw.lib有什么区别吗,我应该在什么情况下选择链接哪一个。 - 小猩猩 2023-7-25
@小猩猩 EasyXw.lib 对应 Unicode 字符编码的项目,EasyXa.lib 对应 MBCS 字符编码的项目。区别请参考 https://codebus.cn/yangw/about-unicode  - 随波逐流 2023-7-25
@小猩猩 你可以看easyx.h前面的预编译指令部分 - 命令方块好方 2023-8-28
技术讨论社区