기본 -arch : SSE 컴파일러 플래그로 빌드 할 때 해결되지 않은 외부 때문에 Ruby 1.9.1을 Visual Studio 2012 (update1 및 2)로 빌드 할 수 없습니다. 모듈 정의 파일을 열면Visual Studio 2012에서 xmm에 대해 확인되지 않은 외부 코드가 생성됨
는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 [email protected]
dummy.exp : error LNK2001: unresolved external symbol [email protected]
msvcr110-ruby191.dll : fatal error LNK1120: 2 unresolved externals
, 다음 레지스터 데이터 항목은 수출 섹션에 나타납니다 : 문제가 발생하지 않는 두 개의 밑줄 앞에
[email protected] DATA
[email protected] DATA
[email protected] DATA
[email protected] DATA
처음 두 항목,하지만 마지막 두 항목을 하나의 밑줄이 앞에 오면 미해결 외부에 대한 책임이 있습니다. 수동으로 def 파일을 수정하여 모두 두 개의 밑줄이있는 문제를 해결하는 것으로 보이지만 문제가 숨어 있거나 문제를 해결하는 것인지 확실하지 않습니다.
또 다른 옵션은 링커 플래그 -force : unresolved로 빌드하는 것이지만 해결되지 않은 외부가 실제로 필요한 경우 위험합니다.
세 번째 옵션은 SSE 명령을 생성하지 않는 -arch : IA32 옵션을 사용하여 컴파일하는 옵션입니다. 그러나이 루비 dll은 x64 플랫폼 용으로도 제작되었으며 대체 -arch 옵션을 사용하여 x64를 성공적으로 빌드 할 수있는 방법이 없습니다.
내 질문은 : 정상/XMM 레지스터 데이터 모듈 정의 파일의 수출로 나타날 것으로 예상
인가?
Win32 및 x64 플랫폼에서이 문제를 해결하는 방법에 대한 아이디어가 있습니까?