查找动态链接库的办法

[root@localhost sbin]# ls
mtr mtr-packet
[root@localhost sbin]# ldd ./mtr
not a dynamic executable

经常会遇到不是动态连接的提示,提供三种方法查看动态链接库。

方法1:ldd ./autogen.sh

方法2:LD_TRACE_LOADED_OBJECTS=1 ./autogen.sh

方法3:readelf -d autogen.sh | grep NEEDED

### 动态链接库中序数14无法定位的解决方案 当遇到动态链接库(DLL)中的特定序数无法定位的问题时,通常意味着应用程序尝试调用DLL内的某个函数失败。此情况可能由多种因素引起,包括但不限于缺失必要的DLL文件、不兼容的不同版本之间的冲突或是编译设置不当。 #### 方案一:确认并更新所需的DLL文件 如果是因为缺少或损坏的目标DLL导致,则可以采取措施来修复该问题。使用像Listary或Everything这样的工具可以帮助快速查找计算机中存在的指定DLL副本[^1]。一旦找到合适的版本,将其放置于报告错误的具体位置,并覆盖旧有的同名文件可能是解决问题的有效途径之一。 对于某些情况下,特别是涉及微软视窗平台上的C++运行环境依赖项时,可以从Visual Studio安装目录获取相应的红istributable组件,例如`msvcm80d.dll`, `msvcp80d.dll`, 和`msvcr80d.dll`等,并将它们部署至应用执行路径下或者Windows系统的System32文件夹内以确保正常运作[^2]。 #### 方案二:调整项目构建配置实现静态链接 另一个可行的方法是从根本上改变项目的编译方式——通过修改工程属性里的代码生成功能部分,具体来说就是更改“运行时库”选项(/MD 或 /MDd 改为 /MT 或 /MTd),从而使得最终生成的应用程序能够独立携带所需的支持库而无需外部依赖任何额外的DLL资源。 此外还可以考虑针对MFC(Microsoft Foundation Classes)类库做同样的处理,即切换到“在静态库中使用 MFC”,以此减少对外部共享库的需求,提高跨设备移植的成功率。 #### 方案三:重新安装相关软件包 有时最简单直接的办法或许是利用原始开发工具所提供的再发布套件(vcredist_xxx.exe),它包含了所有必需的运行支持文件,只需跟随向导完成整个过程就能自动修正大部分由于缺乏必要组件所引发的功能障碍。 最后值得注意的是,上述提到的操作均需谨慎行事,尤其是在涉及到系统级改动之时更应小心以免造成不必要的麻烦;同时建议备份重要数据以防万一。 ```cpp // 示例:检查是否存在特定 DLL 文件及其版本号 #include <windows.h> #include <stdio.h> void CheckDllVersion(const char* dllPath){ HMODULE hModule = LoadLibraryA(dllPath); if (hModule != NULL){ DWORD versionInfoSize = GetFileVersionInfoSizeA(dllPath, NULL); LPVOID lpData; VS_FIXEDFILEINFO *lpFileInfo; if(versionInfoSize && (lpData=(LPVOID)new BYTE[versionInfoSize])){ if(GetFileVersionInfoA(dllPath,NULL,versionInfoSize,lpData)){ UINT uLen; VerQueryValue(lpData,"\\",&lpFileInfo,&uLen); printf("File Version: %u.%u.%u.%u\n", HIWORD(lpFileInfo->dwProductVersionMS), LOWORD(lpFileInfo->dwProductVersionMS), HIWORD(lpFileInfo->dwProductVersionLS), LOWORD(lpFileInfo->dwProductVersionLS)); } delete[] lpData; } FreeLibrary(hModule); }else{ printf("%s not found.\n",dllPath); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值