什么是Linux的ldd在Windows上的等价物?
我的系统上没有看到dumpbin.exe.我的系统上有Visual Studio 2005.当我在命令行上键入dumpbin时,它表示无法识别的命令.
默认情况下是否附带Visual Studio,还是必须显式添加此工具?
我已经构建了一个可以从dot net使用的C++ dll.当我运行progran我得到一个错误,没有找到.
dll就在那里 - 但我用依赖walker检查了它 - 得到了以下内容:
API-MS-WIN-CORE-COM-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
API-MS-WIN-SHCORE-SCALING-L1-1-0.DLL
DCOMP.DLL
Error opening file. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)
我做了一个搜索 - 显然这些是Win 7文件,我有Windows 7 - 但没有找到它们.
我能做什么 ?
我正在使用VS2010,Windows 7
我的proj1.dll它依赖于另一个 DLL proj2.dll,. 我是proj1.dll针对VS2013中编译时编译器输出的导入库进行编译的proj2.dll。我还导出了我有兴趣使用的公共函数。所以现在我有两个独立的 DLL,它们都符合“cdll”标准。
我想在 Python 中使用proj1.dll,但遇到以下问题:
import ctypes
# Crashes saying no entry point for "some_func" in proj2.dll
ctypes.cdll.LoadLibrary("C:\myfolder\proj1.dll")
ctypes.cdll.LoadLibrary("C:\myfolder\proj2.dll") # Loads fine
ctypes.cdll.LoadLibrary("C:\myfolder\proj1.dll") # Loads fine if proj2 is loaded first
Run Code Online (Sandbox Code Playgroud)
以前,当我构建proj2为静态库并在proj1. 这两个 DLL 存在于同一文件夹中。我什至尝试将文件夹的路径添加到我的 PATH 环境变量中,以查看这是否是路径问题,但没有任何改变。
我假设 Windows 将加载proj1.dll然后加载 dll 的依赖项。我错了吗?调用者(Python)是否必须首先加载依赖DLL?有谁知道为什么会发生这种情况?
我有一个代码库,我正在编译到库中.通常我会发送图书馆,MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010)但我的客户要求它MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012).
我已经使用Visual Studio 2012下载/安装并编译了我的Lib的新版本.现在我想检查lib以查看它当前使用的_MSC_VER版本以确保我发送它们正确的版本.
如何检测库中使用的_MSC_VER?
在 Windows 上,当我们尝试导入一个文件,但找不到所依赖的.pydDLL 时,我们会得到以下回溯:.pyd
Traceback (most recent call last):
...
ImportError: DLL load failed: The specified module could not be found.
Run Code Online (Sandbox Code Playgroud)
发生这种情况时,通常必须求助于依赖关系等图形工具来找出丢失模块的名称。
如何通过命令行获取缺少的模块名称?
上下文:我们经常在 CI 中遇到此错误,通过 SSH 登录来查找丢失的模块名称会更容易,而不是通过 GUI 登录。
如果我在 Windows 上从源代码构建 CPython,当我想要 pip 安装包含 C 扩展的包时,我会遇到问题。链接库时似乎发生了错误。
例如,安装 cython 时(但在其他 C 扩展包上也会崩溃并出现相同的错误):
链接:致命错误 LNK1104:无法打开文件“python38.lib”
错误:命令“C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.23.28105\bin\HostX86\x86\link.exe”失败,退出状态为 1104
之所以无法打开“python38.lib”,是因为调试模式下的“.lib”文件名为“python38_d.lib”。
一个最小的可重现示例(在命令行上)基于CPython 开发人员指南的快速参考:
git clone --branch v3.8.0 https://github.com/python/cpython.git
cd cpython
git checkout v3.8.0
.\PCbuild\build.bat -e -d
.\PCbuild\win32\python_d.exe -m ensurepip
.\PCbuild\win32\python_d.exe -m pip install pip --upgrade -vv
.\PCbuild\win32\python_d.exe -m pip install setuptools --upgrade -vv
.\PCbuild\win32\python_d.exe -m pip install cython -vv
Run Code Online (Sandbox Code Playgroud)
结果distutils.sysconfig.get_config_vars()是:
{'BINDIR': '...\\cpython\\PCbuild\\win32',
'BINLIBDEST': ...\\cpython\\Lib',
'EXE': '.exe',
'EXT_SUFFIX': '_d.cp38-win32.pyd',
'INCLUDEPY': '...\\cpython\\include;...\\cpython\\PC',
'LIBDEST': '...\\cpython\\Lib',
'SO': '_d.cp38-win32.pyd',
'VERSION': …Run Code Online (Sandbox Code Playgroud) 我把MSVCR100D.DLL放到c:\ windows\system32文件夹中,但依赖者walker仍在抱怨它丢失了.有任何想法吗?
c++ ×4
dll ×3
python ×3
windows ×2
.net ×1
assemblies ×1
c# ×1
cpython ×1
cygwin ×1
dependencies ×1
interop ×1
ldd ×1
linker ×1
loadlibrary ×1
pip ×1
pyd ×1
python-c-api ×1
setuptools ×1
windows-7 ×1