没有头文件的链接库
Linking library without a header file?
我正在尝试使用 Visual Studio 2010 链接C++中的静态库。问题是,库(和随附的标头)中有很多MFC对象。我想调用库的一个函数,而不重新编译我的项目以包含 MFC,或者重新编译库以不使用 MFC。这篇代码项目文章似乎暗示,如果我在我的项目中将函数定义为外部函数(使用"extern"关键字),这是可能的。
但是,我没有运气。无论我尝试什么,我都得到一个未解决的外部符号错误。
文章正确吗?如果不是,这种联系是否可能以其他方式出现?
你绝对可以做到这一点,你只需要找到完全正确的函数原型。
使用"dumpbin"转储符号表,并查找您的函数。
如果函数名称看起来正常 - 则定义它,并使用"extern C"链接到它。如果符号是 c++ 残缺的,那么你需要解开它才能找到原型。
如果函数不在符号表中 - 则它已在库中静态定义,并且不可访问。然后你就被灌了。没有办法。
如果要调用的函数使用 MFC 位,则还必须向项目添加 MFC 支持。但是,如果不是,并且函数已由库导出,则只需在要调用函数的文件中添加函数的原型,然后将库链接到可执行文件。
例如,您将在调用导出函数的文件中添加如下行:
void __stdcall foo( int );
确保调用约定正确,它可能与__stdcall
不同。此外,您可能必须添加extern "C"
以防止名称重整。
静态库是一个或多个已编译模块的累积。每个模块都可以依赖于其他模块,其中一些模块可能位于其他库中。
如果您需要的函数位于没有其他依赖项的模块中,或者其依赖项都包含在当前库中,则可以在创建适当的函数原型后链接它。如果有其他依赖项,那么您就不走运了。
如果你想要调用timeGetTime,并且由于一些冲突而有理由不包括mmsystem.h,你可以这样做:
extern "C" DWORD WINAPI timeGetTime(void);
#pragma comment(lib, "winmm.lib")
- 无法链接文件系统库C++
- 如何在C++中链接 .a 文件
- 在为 Java 编译动态链接文件时,我应该选择哪些 g++ 参数
- Makefile 将在文件更改时链接文件,但不会重新编译更改的源文件
- CMake 从子目录和父目录链接文件
- 如何将GCC链接器固定地址添加到链接文件中
- 在GCC中链接.h文件
- 使用GDB中的多个链接文件进行调试
- visualstudio2010表达了不同项目中的链接文件
- 编译器是否会优化未使用的链接文件
- 尝试取消链接文件时编译 C++ 时出错
- 链接文件错误,VS 2015中的错误LNK2005
- 用C++中的链接文件编译错误
- Makefile未链接.o文件
- 如何链接.h文件中声明为extern的函数,以创建.dll文件
- 通过makefiles链接文件
- 未定义的引用错误,即使在链接c文件之后
- 多个链接c++文件
- 使用CMakeLists.txt链接c++文件
- 在c++中链接文件