2

这是我第一次创建 .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:未解析的外部符号”错误,我是不是忘记了什么?

4

1 回答 1

3

通常,您为您的库提供一个标头,并将其包含在库和用户中。

首先,您应该extern在函数声明中使用关键字。而且因为您已经指定了调用约定,所以__cdecl您应该保持一致:

mylib.h

extern int __cdecl myFunction(void);

mylib.cpp

#include "mylib.h"

int __cdecl myFunction(void)
{
    return 42;
}

库用户.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
于 2013-01-09T20:59:40.660 回答