好吧。让我描述一下我的问题。所以,有这个宏:
#ifdef DLL_MODE
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
这堂课:
class DLL_API Test
{
public:
void print();
};
这是实现,它位于静态库中。
#include "../LibTest/Test.hpp"
void Test::print()
{
std::cout << "Hello, World!" << std::endl;
}
看起来很简单吧?好吧,没那么多......所以,我的主要问题是编译时,我收到链接器错误:
error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __cdecl Test::print(void)" (__imp_?print@Test@@QEAAXXZ) referenced in function main
但是,如果我从“测试”类中删除“DLL_API”,那么错误就会消失。但是,我首先需要“DLL_API”,因为我需要加载一些需要“DLL_API”宏的 DLL 操作。此外,“DLL_MODE”是在构建静态库时定义的。
我尝试过切换宏、询问 ChatGPT、谷歌搜索,但没有任何效果。
在 Visual Studio 中,__declspec(dllimport) 对于 DLL 中的函数是可选的。 所以你可以使用
#ifdef DLL_MODE
#define DLL_API __declspec(dllexport)
#else
#define DLL_API
#endif