这是我第一次创建.lib文件,我有以下C ++ .exe项目:
#include<stdio.h>
#pragma comment(lib, "mylib.lib")
int myFunction(void);
void main()
{
myFunction();
}
和另一个C项目(.lib项目)
int __cdecl myFunction(void)
{
}
我正在成功编译.lib文件“mylib.lib”并将其放入我的exe文件的编译目录中,但是我收到了“错误LNK2019:未解析的外部符号”错误,我忘记了什么?< / p>
答案 0 :(得分:3)
通常,您为lib提供了一个标题,并在lib和用户中都包含它。
首先,您应该在函数声明中使用extern
关键字。而且因为你已经指定了调用约定__cdecl
,所以你应该保持一致:
<强> mylib.h 强>
extern int __cdecl myFunction(void);
<强> mylib.cpp 强>
#include "mylib.h"
int __cdecl myFunction(void)
{
return 42;
}
<强> libuser.cpp 强>
#include <stdio.h>
#include "mylib.h"
#pragma comment(lib, "mylib.lib")
int main(void)
{
printf( "The answer to the question is %d\n", myFunction() );
return 0;
}
编辑 - 名称错误...
我刚刚看到你对C和C ++项目的评论。在这种情况下,您必须帮助编译器进行符号修改。在标题中,您可以执行以下操作:
#ifdef __cplusplus
extern "C" {
#endif
extern int __cdecl myFunction(void);
#ifdef __cplusplus
}
#endif