2012-03-15 70 views
1

我正在使用Visual Studio 2010编写的预编译库(.lib)。我的解决方案有两个项目。第一个项目(C)构建库。第二个项目(C++)是一个用于测试库的Win32控制台应用程序。我试过的所有东西都不能解决链接器错误。 (我认为这很容易,因为一切都在相同的解决方案。)任何指针将不胜感激。谢谢。如何在Visual Studio中使用预编译库生成应用程序

这里是我收到链接器错误:

1> MyProject.obj:错误LNK2019:无法解析的外部符号 “无效__cdecl创建my_function(无效)”(?创建my_function @@ YAXXZ)函数引用_wmain

1> C:\ Documents和Settings \用户\桌面\ MySolution \调试\ MyProject.exe:致命错误LNK1120:1周无法解析的外部

这是Win32控制台应用程序的代码:

#include "stdafx.h" 
#include "my_api.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    my_function(); 

    return 0; 
} 

这里的my_function是如何在my_api.h声明:

extern VOID my_function(VOID); 
+0

C++项目的库路径中的.c库的输出目录是什么?不幸的是,仅仅让它们在同一个解决方案中是不够的(与C#相反,它很容易) – 2012-03-15 17:57:58

+0

不要让我们猜测链接器错误。 – 2012-03-15 18:05:13

+0

@HansPassant:我很抱歉。谢谢你的礼貌。我添加了链接器错误和导致它的代码。 – 2012-03-15 19:11:43

回答

2

您需要declare your function with C linkage,以便链接器明白,这些功能是在C代码中定义,而不是C++代码:

// my_api.h 
#ifdef __cplusplus 
extern "C" { 
#endif 

extern VOID my_function(VOID); 
// more function declarations etc. 

#ifdef __cplusplus 
} 
#endif 

如果您只有一个功能,可以放下大括号:

// my_api.h 
#ifdef __cplusplus 
extern "C" 
#endif 
extern VOID my_function(VOID); 
+0

他们都是很好的答案,但我接受你,因为你的反馈解决了我甚至没有考虑过的问题。谢谢! – 2012-03-15 19:49:53

1

确保库项目的输出目录(无论$(OutDir)扩展到该项目中)位于测试项目的链接器搜索路径中。为此,请转到项目“属性”对话框。在Linker -> General下,确保目录设置为Additional Library Directories。此外,请确保在Linker -> Input下文库本身(my_api.lib)已列在Additional Dependencies中。

+0

感谢您的好评!您帮助清理了我的项目设置。 :) – 2012-03-15 19:50:34

相关问题