gpt4 book ai didi

C++ DLL : unresolved external symbol

转载 作者:行者123 更新时间:2023-11-30 03:33:27 25 4
gpt4 key购买 nike

我似乎在为我的项目创建新文件时遇到了一些问题。

问题是,在我的 sk_error.h 文件中,它似乎提示 unresolved external symbols(下面是完整的错误报告)。当我将我的 OutOfRange 类放入我的 sk_interface.h 文件时,没有人提示,但是当我将类放入错误文件时,它出现了问题。

如果我要注释掉 OutOfRange 它工作得很好所以我不认为这是 DLL 设置的问题。

sk_error.h

#include <sk_platform.h>
#include <sk_interface.h>

namespace sky {
class SK_API OutOfRange : IError {
public:
OutOfRange() {
m_message = " Out Of Range";
m_value = (0 << 1);
}
std::string getMessage() override {
return m_message;
}
};
}

sk_platform.h

#if defined (SK_NONCLIENT_BUILD)
#ifndef SK_API
#define SK_API __declspec(dllexport)
#endif
#else
#ifndef SK_API
#define SK_API __declspec(dllimport)
#endif
#endif

sk_interface.h

#include <sk_platform.h>
#include <string>

namespace sky {

...

class SK_API IError {
public:
virtual std::string getMessage() = 0;
protected:
uint32_t m_value = 0;
std::string m_message = "Error not initialized";
};

}

使用 DLL 的客户端项目

#include <sk_logmanager.h>
#include <sk_error.h>
#include <iostream>

int main() {
sky::g_LogManager.startup();
sky::OutOfRange err;
std::cout << err.getMessage() << "\n";
sky::g_LogManager.shutdown();
while (1) {}
}

错误输出

1>------ Build started: Project: SkyTest, Configuration: Debug Win32 ------
1>main.cpp
1>main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall sky::OutOfRange::OutOfRange(void)" (__imp_??0OutOfRange@sky@@QAE@XZ) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall sky::OutOfRange::getMessage(void)" (__imp_?getMessage@OutOfRange@sky@@UAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall sky::OutOfRange::~OutOfRange(void)" (__imp_??1OutOfRange@sky@@QAE@XZ) referenced in function _main
1>C:\Users\Matt\Documents\Game Development\DevEnv\SkyTest\Debug\SkyTest.exe : fatal error LNK1120: 3 unresolved externals
1>Done building project "SkyTest.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

编辑:

我正在使用 Visual Studio 2017(可能是错误的来源)。客户端项目正在使用 .lib 文件。

最佳答案

未解析的外部始终是链接错误。它甚至在它的名字中有它:LNK2019。

它告诉你它找不到 sky::OutOfRange::OutOfRange() 的实现

您将它放在标题中的某个地方并调用了它,但您还没有链接到实现它的库。

我们无法告诉您哪个库实现了它或它在您硬盘上的位置。您必须查阅 OutOfRange 的文档、它的作者或您自己。

我可以告诉您,您需要检查:右击可执行项目->

properties->linker->general->additional library directories属性->链接器->输入->附加依赖

并确保定义 OutOfRange 的库路径在前者中,库名称在后者中。

编辑:如果库本身有一个导入它的 header ,正如您发布的代码所示,您只需要设置附加目录部分。

最后,您必须查阅您正在使用的任何库的文档或访问他们的论坛。

关于C++ DLL : unresolved external symbol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42867030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com