C++如何判断static.lib是否有效,是否可从外部代码调用
C++ how to tell if static .lib is valid, callable from external code
我有一个由供应商提供的C++.lib文件,其中包含一些稀疏的文档和示例代码。我的任务是用它来构建一个原型来展示供应商的技术。
作为一名(主要)C#/Java开发人员,我正试图使用这个库和我所知道的技巧来破解一些基本的东西——所有这些都让我相信我错过了一些东西(或者这个库是…)
dumpbin/exports-foo.bin不显示任何导出的函数:
E:SDKsAcmelib>dumpbin /exports foo.lib
Microsoft (R) COFF/PE Dumper Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file foo.lib
File Type: LIBRARY
Summary
1AB29A0 .bss
6BD0 .data
AAE0 .nocopy
C5A0E0 .noinit
1954D0 .rdata
19000 .scratch
C1CA0 .text
492000 .vram
lib/listfoo.lib显示了一个数字,我认为它是扩展名为.w32o的函数名。根据函数名称和供应商所处的业务类型,这些看起来都是有效的。
供应商的README表示通过调用其__foo_entry()函数来启动库。垃圾箱/SYMBOLS实际上显示了这个功能:
040 00002826 SECT1 notype () External | __foo_entry
供应商的示例代码加载库(使用dlopen,根据我的理解,这是加载库的一种*nix方式。)
但我已经创建了一个VS2010项目,并尝试像这样加载库:
System::Void load(){
HINSTANCE sdl_library = LoadLibrary(TEXT("E:\SDKs\Acme\lib\foo.lib"));
if (sdl_library == NULL) {
Console::WriteLine("error");
} else {
Console::WriteLine("success");
}
}
当项目尝试到包含"LoadLibrary"的行时,调试器抛出一个Bad Image异常:"E:\SDKs\Acme\lib\foo.lib"不是为在Windows上运行而设计的,或者它包含一个错误。。。">
依赖助行器在这里没有多大帮助,因为.lib是静态的。
那么:它是否是一个有效的.lib?
visualstudio命令行工具似乎表明它是有效的,但试图将它加载到项目中表明它不是。
在Windows上,共享库和LoadLibrary
与文件扩展名.dll
相关联。
.lib
建议您应该尝试静态链接,比如linux.a
文件。.lib
文件可能包含实际代码,但也用于导入库,因此静态链接将在运行时生成需要DLL的二进制文件。
相关文章:
- 如果变量名称不跟在 char* 后面,const char* 是否有效?
- 钳制迭代器是否有效
- 检查由括号、方括号和大括号组成的一组方括号是否有效?
- 在函数内创建的对象的范围 - 如果在函数外部存储和访问引用,它们是否有效?
- 模板签名解析为 void(void) 被 GCC 拒绝;这是否有效C++?
- 我如何知道作为参数的size_t在函数中是否有效?
- 我的运算符重载是否有效<<(流插入)左操作数不是 ostream
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 此递归模板类型定义是否有效C++?
- 将 C 函数转换为 C++ 以检查数字是否有效
- 函数参数的名称与调用函数时使用的变量相同是否有效?
- 如何检查输入是否有效?
- 如何检查用户的输入是否有效以及我正在寻找的数字?
- 在函数中按值传递 unordered_map/unordered_set 是否有效? C++
- 如何检查isupper(cstr)是否有效?
- 将 std::transform 与 std::back_inserter 一起使用是否有效?
- 只需要知道我在c ++中打印模式的方式是否有效,或者有另一种方法可以有效地做到这一点
- 如何检查字符串格式在读取C++文本文件时是否有效?
- 在 c++ 中将对象设置为等于同一类的构造函数是否有效?
- 创建加密安全密码.并验证它是否有效