我正在尝试使用cygwin在64位Win7机器上构建一个python扩展DLL(因为cygwin只运行32位进程,这实际上是交叉编译).
我自己使用dlltool从python27.dll创建了libpython27.a(例如,在这里解释),但是在链接器阶段构建失败说
skipping incompatible c:\Python27\libs/libpython27.a when searching for -lpython27
这正是这里报告的错误(那里的人最终转向MSVC编译器.. ).
更多信息:
- Active Python 2.7.2,win64,x64
- 最新版本的cygwin,使用/usr/bin/x86_64-w64-mingw32-g++.exe编译器
有谁知道这是否支持?
有没有办法使用我想念的dlltool?
(我确实在这里找到了使用的指导,
dlltool --as-flags=--64 -m i386:x86-64 -k -l libpython27.a -d python.def
但是当这样做时我"invalid bfd target"
从dlltool 得到错误)
谢谢!
更新:我相信它可以完成,因为Enthought python包含这样的文件.我想为不包含它的更常见的发行版创建一个.
我有一个用VS2008(amd64)构建的DLL项目.dll的清单说
<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='amd64' publicKeyToken='1fc8b3b9a1e18e3b' />
Run Code Online (Sandbox Code Playgroud)
当我将dll加载到DependencyWalker时,它引用winsxs-directory
amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.6161_none_08e61857a83bc251
Run Code Online (Sandbox Code Playgroud)
怎么会发生这种情况?是不是这整个事情 - 通过给每个dll/exe提供它所构建的版本的信息以及它所依赖的CRT版本来避免这种情况?
第二个,更令人困惑的是,msvcp90.dll依赖于msvcr90.dll,但无法找到msvcr90.dll!?!嘿,它与msvcm90.dll和msvcp90.dll一起位于相同的winsxs目录中!如果我将正确的msvcr90.dll复制到与我的dll相同的目录中,它就可以了!(但是,再一次,这不是我们在DllHell时代的情况吗?并且不应该msvc*.dll复制应该结束,因为我们有清单???)
如果有人对我有解释,我将非常感激!
我有一个开源项目,必须在Win32 / Win64 / Linux / MacOSX下构建。
我们想使用pthreads支持我们的多线程范例,但是由于我的项目是开源的,所以所有内容都必须从源代码构建。因此,我需要用于在Win64上编译的pthread版本的源代码文件。
有人知道我在哪里可以找到所述文件吗?
我已经阅读了微软的文档,但是这个方案太尴尬了,我想我会仔细检查以确保我正确理解它...
我的理解是通过参数传递的通用方法是这样的:
--- bottom of stack ---
(return address)
[shadow space for arg 1]
[shadow space for arg 2]
[shadow space for arg 3]
[shadow space for arg 4]
arg N
arg N - 1
arg N - 2
...
arg 6
arg 5
---- top of stack -----
Run Code Online (Sandbox Code Playgroud)
实施时似乎很尴尬va_arg
......这实际上是否正确?
我使用的 JetBrains Rider 是官方网站上的最新版本,2019.1.2(免费试用 30 天)。不是破解版。
我有一个包含 ASP.NET Web API csproj 的解决方案。该解决方案在 IIS 或 VS + IISExpress 中正常工作。
和 VS 一样,Rider 也在 .idea 文件夹中创建了一些配置文件。在其中,我可以找到 IISExpress 的 applicationhost.config 文件。
问题是 IISExpress 永远无法启动并在我开始在控制台中调试后显示错误:
**Failed to initialize site bindings**
Error initializing ULATQ. hr = 80070005
Terminating W3_SERVER object
InitComplete event signalled
Process Model Shutdown called
Waiting for all LISTENER_CHANNELS to stop
Unable to start iisexpress.
Run Code Online (Sandbox Code Playgroud)
我检查了 applicationhost.config 文件。它与VS生成的相同。它还有绑定信息行,我确定端口可用:
**Failed to initialize site bindings**
Error initializing ULATQ. hr = 80070005
Terminating W3_SERVER object
InitComplete …
Run Code Online (Sandbox Code Playgroud) 再次,将32位应用程序移植到64位.我在下面提到的C_ASSERT语句中得到了负下标错误.
C_ASSERT (sizeof(somestruct) == some#define);
Run Code Online (Sandbox Code Playgroud)
我还阅读了http://support.microsoft.com/kb/68475文章,但不知道在这种情况下我是否知道如何修复它.
感谢帮助.
提前致谢.
我有一个32位应用程序,必须使用64位版本的MySQL在Windows x64服务器上运行.
我应该使用32位ODBC驱动程序还是64位ODBC驱动程序?
或者我也应该安装32位版本的MySQL吗?
我有一个32位进程,可以在32位或64位Windows中运行.因此,当然,如果进程尝试访问该文件c:\windows\system32\file.ext
,它将被重定向到c:\windows\SysWOW64\file.ext
.到目前为止很好 - 我不想禁用重定向.
我的问题是我的进程实际上并没有访问该文件 - 相反它只是将其路径写入文本文件,我希望该文本文件SysWOW64
在64位系统和system32
32位系统上读取.我怎样才能做到这一点?
我想复制c:\Windows\regedit.exe
到regedit2.exe
名称相同的目录但是当我尝试复制它时,我收到一个错误,说regedit.exe
找不到文件"或者有时将它复制到windows\SysWOW64
目录下.实际上我知道win64
它是重定向它但是如何禁用重定向和复制windows/regedit.exe到windows/regedit2.exe.我的示例代码是
if(File.Exists(@"c:\Windows\regedit.exe"))
try
{
File.Copy(@"c:\Windows\regedit.exe", @"c:\Windows\regedit2.exe", true);
}
catch (Exception ex){}
Run Code Online (Sandbox Code Playgroud)
有任何人可以帮助我
我正在使用Component Tag(NativeInt)值的赋值将其添加到字节集中.该程序在为WIN32编译时工作正常,但不为WINx64编译.(错误2001所需的序数类型)这是一个MCVE:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils, System.Classes;
var
S:set of byte;
C:TComponent;
begin
C:=TComponent.Create(nil);
C.Tag:=1;
s:=[C.Tag];
C.Free;
end.
Run Code Online (Sandbox Code Playgroud)
如何调整代码使其适合WINx64编译?
win64 ×10
64-bit ×3
windows ×2
32-bit ×1
32bit-64bit ×1
c# ×1
c++ ×1
cygwin ×1
delphi ×1
delphi-xe5 ×1
iis-express ×1
manifest ×1
mingw ×1
msvcr90.dll ×1
mysql ×1
odbc ×1
open-source ×1
pthreads ×1
python ×1
redirect ×1
rider ×1
visual-c++ ×1