我遇到了一个问题,我一直试图解决这个问题的时间最长。
我在visual c ++中有一个静态库项目,我希望另一个项目能够链接到它。到目前为止,我只是添加了对静态库项目的引用,该项目自动链接库。
我希望能够仅使用头文件和.lib文件链接到库。但是,我收到“未解析的外部符号”错误。
我以为我做得对 - 我指定了include目录,库目录,并进入了链接器输入属性,并提供了lib作为附加依赖项。
我能够以这种方式引用其他静态库(如SDL),所以当我尝试引用我的时候为什么会出错呢?
感谢您的帮助。
问题是它没有引用实际的lib文件,还是lib本身内的东西? 这些是我收到的错误消息:
错误2错误LNK2019:未解析的外部符号“public:void __thiscall XEngine :: XCore :: XScreen :: init(class XEngine :: XCore :: XGame&)”(?init @ XScreen @ XCore @ XEngine @@ QAEXAAVXGame @ 23 @@ Z)在函数“void __cdecl XEngine :: XEngineInit(类XEngine :: XCore :: XScreen&,类XEngine :: XCore :: XGame&)”中引用“(?XEngineInit @XEngine @@ YAXAAVXScreen @ XCore @ 1 @ AAVXGame @ 31 @@ Z)C:\ Users \ Xander Masotto \ Documents \ Visual Studio 2010 \ Projects \ Pong \ Pong \ source.obj Pong
错误3错误LNK2019:未解析的外部符号“public:__thiscall XEngine :: XCore :: XScreen ::〜XScreen(void)”(?? 1XScreen @ XCore @ XEngine @@ QAE @ XZ)在函数“void __cdecl”中引用XEngine :: XEngineInit(类XEngine :: XCore :: XGame&)“(?XEngineInit @XEngine @@ YAXAAVXGame @ XCore @ 1 @@ Z)C:\ Users \ Xander Masotto \ Documents \ Visual Studio 2010 \ Projects \ Pong \ Pong \ source.obj Pong
错误4错误LNK2019:未解析的外部符号“public:__thiscall XEngine :: XCore :: XScreen :: XScreen(void)”(?? 0XScreen @ XCore @ XEngine @@ QAE @ XZ)在函数“void __cdecl XEngine”中引用:: XEngineInit(类XEngine :: XCore :: XGame&)“(?XEngineInit @XEngine @@ YAXAAVXGame @ XCore @ 1 @@ Z)C:\ Users \ Xander Masotto \ Documents \ Visual Studio 2010 \ Projects \ Pong \ Pong \ source.obj Pong
答案 0 :(得分:4)
确保导出库中要向其他应用程序(即dll或exe)公开的函数,类和变量。默认情况下,它们不会被曝光。
在为库创建项目时,通常会执行此操作。
#ifdef TESTLIB_EXPORTS
#define TESTLIB_API __declspec(dllexport)
#else
#define TESTLIB_API __declspec(dllimport)
#endif
使用在项目创建期间生成的上述代码,我只需要做两件事来公开函数,类或变量:
1)确保我已将TESTLIB_EXPORTS定义为预处理器。项目设置:C ++ / Preprocessor / PreprocessorDefinitions
2)对我想要暴露的每个函数,类或变量使用TESTLIB_API定义:
class TESTLIB_API Order {
void doSomething();
};