在为我的个人小应用程序创建 GUI 后,我尝试将其编译为静态库以在另一个项目中使用。 GUI 已创建,并通过托管公共引用类执行其他任务,该类当前只有 5 个函数,但将添加到其中。
这是我在静态库中的头文件,它将包含在另一个项目中(好吧,至少是一个只有公共函数的新头文件,所有额外的东西都将被删除);
#ifndef GUIInterface_H
#define GUIInterface_H
#include
#include "MainForm.h"
using namespace System;
using namespace System::Threading;
public ref class GUIInterface
{
private:
ThreadStart^ GUIThreadDelegate;
Thread^ GUIThread;
void GUIThreadFunction()
{
ANNGUI::Application::EnableVisualStyles();
ANNGUI::Application::Run(gcnew ANNGUI::MainForm());
return;
}
public:
int CreateGUI();
int DestroyGUI();
int GetInputData();
bool CheckNewInput();
int NetworkState();
};
#endif
这是从其他项目(.exe)访问它的方式
#include "main.h"
int main()
{
GUIInterface ^GUI = gcnew(GUIInterface);
GUI->CreateGUI();
return 0;
}
main.h 仅包含类定义(如上面所示的头文件),减去私有内容。
我正在使用 Visual Studio 2010 Express C++。这两个项目都是使用 /clr 开关编译的。静态库被设置为 .exe 项目中的引用。当我将静态库编译为 DLL 时,程序运行完美(在我删除应用程序中的 main.h 之后)。当它被编译为静态库时,用于与 GUI 通信的每个函数都会出现 LNK2020 错误。
我将 .exe 与 /VERBOSE 选项链接起来以查看输出。链接器多次精确地查找 .lib 所在的位置,但从未说过它找到了它,即使它正在精确地查找正确的路径和正确的文件。另外,如果这意味着什么,我的 .lib 构建得很好,但将此作为警告。
.NETFramework,Version=v4.0.AssemblyAttributes.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
我的问题是,为什么链接器在正确的位置寻找 .lib,却没有在它的面前看到它?我该如何解决这个问题以便我可以使用我的静态.lib?