Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Visual Studio 2012为xmm生成未解析的外部_Ruby_Visual Studio 2012_Unresolved External_Sse - Fatal编程技术网

Ruby Visual Studio 2012为xmm生成未解析的外部

Ruby Visual Studio 2012为xmm生成未解析的外部,ruby,visual-studio-2012,unresolved-external,sse,Ruby,Visual Studio 2012,Unresolved External,Sse,Ruby 1.9.1在使用默认-arch:SSE编译器标志构建时,由于未解析外部,无法使用Visual Studio 2012(更新1和2)构建 cl -nologo -LD main.obj dmyext.obj msvcr110-ruby191-static.lib msvcr110-ruby191.res unicows.lib oldnames.lib user32.lib advapi32.lib shell32.lib ws2_32.lib -Femsvcr110-rub

Ruby 1.9.1在使用默认-arch:SSE编译器标志构建时,由于未解析外部,无法使用Visual Studio 2012(更新1和2)构建

    cl -nologo -LD main.obj dmyext.obj msvcr110-ruby191-static.lib  msvcr110-ruby191.res unicows.lib oldnames.lib user32.lib advapi32.lib shell32.lib ws2_32.lib  -Femsvcr110-ruby191.dll -link -incremental:no -debug -opt:ref -opt:icf   -implib:dummy.lib -def:msvcr110-ruby191.def -MAP:map-out.txt
Creating library dummy.lib and object dummy.exp
dummy.exp : error LNK2001: unresolved external symbol _xmm@41f00000000000000000000000000000
dummy.exp : error LNK2001: unresolved external symbol _xmm@7fffffffffffffff7fffffffffffffff
msvcr110-ruby191.dll : fatal error LNK1120: 2 unresolved externals
打开模块定义文件时,以下寄存器数据项出现在导出部分:

__xmm@80000000000000008000000000000000 DATA
__xmm@80000000800000008000000080000000 DATA
_xmm@41f00000000000000000000000000000 DATA
_xmm@7fffffffffffffff7fffffffffffffff DATA
前两项加上两个下划线不会导致问题,但后两项加上一个下划线会导致未解决的外部问题。手动修改def文件,使它们都有两个下划线似乎可以解决问题,但我不确定这只是隐藏问题还是解决问题

另一种选择是使用链接器标志-force:unresolved进行构建,但如果实际需要未解析的外部,这是危险的

解决此问题的第三个选项是使用-arch:IA32选项编译,该选项不会生成SSE指令。但是,这个ruby dll也是为x64平台构建的,似乎无法使用可选的-arch选项成功构建x64

我的问题是:

xmm寄存器数据在模块定义文件中显示为导出是否正常/预期


对于如何在Win32和x64平台上解决这一问题,您有什么想法吗?

这个问题现在已经解决了

事实证明,有一个名为mkexports.rb的ruby脚本为msvcr110-ruby191.lib生成导出

在函数each_export中,有一行代码排除基于8-16十六进制数字的数据项,这成功地排除了u实际数据

next if /(?!^)@.*@/ =~ l || /@[[:xdigit:]]{8,16}$/ =~ l || /^_DllMain@/ =~ l
修改了代码,排除了基于8-32个十六进制数字的项,现在也排除了_xmm数据

next if /(?!^)@.*@/ =~ l || /@[[:xdigit:]]{8,32}$/ =~ l || /^_DllMain@/ =~ l

这个问题现在已经解决了

事实证明,有一个名为mkexports.rb的ruby脚本为msvcr110-ruby191.lib生成导出

在函数each_export中,有一行代码排除基于8-16十六进制数字的数据项,这成功地排除了u实际数据

next if /(?!^)@.*@/ =~ l || /@[[:xdigit:]]{8,16}$/ =~ l || /^_DllMain@/ =~ l
修改了代码,排除了基于8-32个十六进制数字的项,现在也排除了_xmm数据

next if /(?!^)@.*@/ =~ l || /@[[:xdigit:]]{8,32}$/ =~ l || /^_DllMain@/ =~ l