创建.lib文件-第一次 这是我第一次创建.LIB文件,我有以下C++ +exe项目: #include<stdio.h> #pragma comment(lib, "mylib.lib") int myFunction(void); void main() { myFunction(); }

创建.lib文件-第一次 这是我第一次创建.LIB文件,我有以下C++ +exe项目: #include<stdio.h> #pragma comment(lib, "mylib.lib") int myFunction(void); void main() { myFunction(); },c++,c,windows,static-libraries,C++,C,Windows,Static Libraries,我正在成功编译.lib文件“mylib.lib”,并将其放入exe文件的编译目录中,但我收到了“错误LNK2019:未解决的外部符号”错误,我是否忘记了什么?通常为lib提供一个头,并将其包含在lib和用户中 首先,您应该在函数声明中使用extern关键字。由于您已经指定了调用约定\uuu cdecl,因此您应该保持一致: mylib.h extern int __cdecl myFunction(void); mylib.cpp #include "mylib.h" int __cdecl

我正在成功编译.lib文件“mylib.lib”,并将其放入exe文件的编译目录中,但我收到了“错误LNK2019:未解决的外部符号”错误,我是否忘记了什么?

通常为lib提供一个头,并将其包含在lib和用户中

首先,您应该在函数声明中使用
extern
关键字。由于您已经指定了调用约定
\uuu cdecl
,因此您应该保持一致:

mylib.h

extern int __cdecl myFunction(void);
mylib.cpp

#include "mylib.h"

int __cdecl myFunction(void)
{
    return 42;
}
#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;
}
libuser.cpp

#include "mylib.h"

int __cdecl myFunction(void)
{
    return 42;
}
#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;
}

除此之外,还有
main
的返回类型。这是C还是C++?你说得对,我忘了“空洞”。第一个项目是C++,而第二个项目是CHave。这里给出的
#pragma
包括作为链接器依赖项的静态库。无需在项目设置中指定它。而且,用户似乎并没有谈论DLL。@JohnnyPauling:没有
main
返回
int
,而不是
void
。总是。该死的,我一直在得到“未解析的外部符号myFunction在函数main中引用”请检查并再次检查您的大写字母、返回类型和参数列表。它必须在任何地方匹配。确保你已经处理了我在编辑中提到的C++名字。确保使用了
extern
关键字。并确保您复制了正确的库,并且您的项目位于正确的位置。它可能在其他地方使用了旧版本。我认为这不再是名称混乱的问题,因为这里有dumpbin/symbols输出:“13B 00000000 SECT5 notype()External | u myFunction”,所以该函数被导出。。。我的cpp程序仍然看不到它。我仔细检查了每一条字符串嗯,是dumpbin添加的我函数上的“uu”还是什么?可能是问题吗?这个答案对我来说很好,但我要补充一点:您是否注意到所有对象都是为相同的体系结构编译的?我的意思是:如果你有一个32位的对象,它应该与其他32位的对象链接。32位和64位代码不能互换链接