# Windows 7 - building win32/api gem

**URL:** <https://www.ruby-forum.com/t/windows-7-building-win32-api-gem/161882>\
**Category:** Ruby\
**Created:** [March 3, 2009, 11:51am UTC](https://www.ruby-forum.com/t/windows-7-building-win32-api-gem/161882 "2009-03-03T11:51:37Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![swozniak](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/e9a140/32.png) [@swozniak](https://www.ruby-forum.com/u/swozniak)\
**Post date:** [March 3, 2009, 11:51am UTC](https://www.ruby-forum.com/t/windows-7-building-win32-api-gem/161882/1 "2009-03-03T11:51:37Z")

</div>

Hi Guys,

I have been trying to install win32-api 1.4.0 gem on windows 7 x64 but  
no success.

When i install x86 version, require ‘win32/api’ gives me following  
error:

LoadError: 193: %1 is not a valid Win32 application. -  
c:/ruby/lib/ruby/gems/1.9.1/gems/win32-api-1.4.0-x86-mswin32-60/lib/win32/api.so  
from (irb):1:in `require' from (irb):1 from c:/ruby/bin/irb.bat:20:in`’

My ruby:  
ruby 1.9.1p0 (2009-01-30 revision 21907) [x64-mswin64\_80]

My gems:  
1.3.1

I have VS2008 installed and even managed to create a makefile but it  
complains about following:

C:\>gem install win32-api  
Building native extensions. This could take a while…  
ERROR: Error installing win32-api:  
ERROR: Failed to build gem native extension.

c:/ruby/bin/ruby.exe extconf.rb install win32-api  
checking for strncpy\_s()… yes  
creating Makefile

nmake

Microsoft ® Program Maintenance Utility Version 9.00.21022.08  
Copyright © Microsoft Corporation. All rights reserved.

```
    c:\ruby\bin\ruby -e "puts 'EXPORTS', 'Init_api'" >

```

api-x64-mswin64\_80.def  
cl -nologo -I. -Ic:/ruby/include/ruby-1.9.1/x64-mswin64\_80  
-Ic:/ruby/include/ruby-1.9.1/ruby/backward -Ic:/ruby/include/ruby-1.9.1  
-Iwin32 -MD -Zi -O2b  
2xty- -Zm600 -DHAVE\_STRNCPY\_S -D\_CRT\_SECURE\_NO\_DEPRECATE  
-D\_CRT\_NONSTDC\_NO\_DEPRECATE -Foapi.obj -c -Tcwin32/api.c  
api.c  
cl -nologo -LD -Feapi.so api.obj msvcr80-ruby191.lib  
oldnames.lib user32.lib advapi32.lib shell32.lib ws2\_32.lib -link  
-incremental:no -debug -opt:re  
f -opt:icf -dll -libpath:"." -libpath:“c:/ruby/lib”  
-implib:api-x64-mswin64\_80.lib -pdb:api-x64-mswin64\_80.pdb  
-def:api-x64-mswin64\_80.def  
Creating library api-x64-mswin64\_80.lib and object  
api-x64-mswin64\_80.exp  
api.obj : error LNK2019: unresolved external symbol \_rb\_num2long  
referenced in function \_NUM2LONG  
api.obj : error LNK2019: unresolved external symbol \_rb\_int2big  
referenced in function \_LONG2NUM  
api.obj : error LNK2019: unresolved external symbol \_rb\_uint2big  
referenced in function \_ULONG2NUM  
api.obj : error LNK2019: unresolved external symbol  
\_rb\_data\_object\_alloc referenced in function \_api\_allocate  
api.obj : error LNK2019: unresolved external symbol \_rb\_raise referenced  
in function \_StringError  
api.obj : error LNK2019: unresolved external symbol \_rb\_iv\_set  
referenced in function \_callback\_init  
api.obj : error LNK2019: unresolved external symbol \_rb\_str\_new\_cstr  
referenced in function \_callback\_init  
api.obj : error LNK2019: unresolved external symbol \_rb\_scan\_args  
referenced in function \_callback\_init  
api.obj : error LNK2019: unresolved external symbol \_rb\_string\_value\_ptr  
referenced in function \_api\_init  
api.obj : error LNK2019: unresolved external symbol \_rb\_str\_cat  
referenced in function \_api\_init  
api.obj : error LNK2019: unresolved external symbol \_rb\_str\_new\_shared  
referenced in function \_api\_init  
api.obj : error LNK2019: unresolved external symbol \_rb\_check\_safe\_obj  
referenced in function \_api\_init  
api.obj : error LNK2019: unresolved external symbol \_rb\_string\_value  
referenced in function \_api\_init  
api.obj : error LNK2001: unresolved external symbol \_\_imp\_\_rb\_eArgError  
api.obj : error LNK2019: unresolved external symbol \_rb\_ary\_push  
referenced in function \_api\_init  
api.obj : error LNK2019: unresolved external symbol \_rb\_ary\_new  
referenced in function \_api\_init  
api.obj : error LNK2019: unresolved external symbol \_rb\_str\_split  
referenced in function \_api\_init  
api.obj : error LNK2019: unresolved external symbol \_rb\_respond\_to  
referenced in function \_api\_init  
api.obj : error LNK2019: unresolved external symbol \_rb\_intern  
referenced in function \_api\_init  
api.obj : error LNK2019: unresolved external symbol \_rb\_check\_type  
referenced in function \_api\_init  
api.obj : error LNK2019: unresolved external symbol \_rb\_str\_modify  
referenced in function \_CallbackFunction  
api.obj : error LNK2019: unresolved external symbol \_rb\_num2ulong  
referenced in function \_CallbackFunction  
api.obj : error LNK2019: unresolved external symbol \_rb\_funcall2  
referenced in function \_CallbackFunction  
api.obj : error LNK2019: unresolved external symbol \_rb\_iv\_get  
referenced in function \_CallbackFunction  
api.obj : error LNK2019: unresolved external symbol \_rb\_str\_new  
referenced in function \_api\_call  
api.obj : error LNK2019: unresolved external symbol \_rb\_define\_const  
referenced in function \_Init\_api  
api.obj : error LNK2019: unresolved external symbol \_rb\_define\_attr  
referenced in function \_Init\_api  
api.obj : error LNK2019: unresolved external symbol \_rb\_define\_method  
referenced in function \_Init\_api  
api.obj : error LNK2019: unresolved external symbol  
\_rb\_define\_alloc\_func referenced in function \_Init\_api  
api.obj : error LNK2001: unresolved external symbol  
\_\_imp\_\_rb\_eRuntimeError  
api.obj : error LNK2019: unresolved external symbol  
\_rb\_define\_class\_under referenced in function \_Init\_api  
api.obj : error LNK2001: unresolved external symbol \_\_imp\_\_rb\_cObject  
api.obj : error LNK2019: unresolved external symbol \_rb\_define\_module  
referenced in function \_Init\_api  
api.so : fatal error LNK1120: 33 unresolved externals  
NMAKE : fatal error U1077: ‘“C:\Program Files (x86)\Microsoft Visual  
Studio 9.0\VC\BIN\cl.EXE”’ : return code ‘0x2’  
Stop.

Gem files will remain installed in  
c:/ruby/lib/ruby/gems/1.9.1/gems/win32-api-1.4.0 for inspection.  
Results logged to  
c:/ruby/lib/ruby/gems/1.9.1/gems/win32-api-1.4.0/ext/gem\_make.out

Does anyone have any idea about building gem on windows? Or maybe you  
have precompiled api.so on your x64 system.

I would appreciate your help.

---

<div class="post-metadata">

**Author:** ![swozniak](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/e9a140/32.png) [@swozniak](https://www.ruby-forum.com/u/swozniak)\
**Post date:** [March 3, 2009, 4:37pm UTC](https://www.ruby-forum.com/t/windows-7-building-win32-api-gem/161882/2 "2009-03-03T16:37:47Z")

</div>

Hi,

2009/3/3 Stanislaw W. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> Â Â Â Â from (irb):1:in `require’  
> complains about following:  
> nmake  
> -D\_CRT\_NONSTDC\_NO\_DEPRECATE -Foapi.obj -c -Tcwin32/api.c  
> api.c  
> …
> 
> Does anyone have any idea about building gem on windows? Or maybe you  
> have precompiled api.so on your x64 system.

I guess you tried to build win32-api module with Visual C++ 9.0.  
You must use the same compiler with the Ruby version(x64-mswin64\_80).  
After some trials and errors, I managed to build win32-api module with  
Visual C++ 8.0.  
You can download at [http://121.78.227.9/win32-api-1.4.0/lib/win32/api.so](http://121.78.227.9/win32-api-1.4.0/lib/win32/api.so)

NB, Using win32utils on the 64bit Ruby is not tested.

Regards,

Park H.

---

<div class="post-metadata">

**Author:** ![swozniak](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/e9a140/32.png) [@swozniak](https://www.ruby-forum.com/u/swozniak)\
**Post date:** [March 3, 2009, 4:54pm UTC](https://www.ruby-forum.com/t/windows-7-building-win32-api-gem/161882/3 "2009-03-03T16:54:08Z")

</div>

Thanks for your help, it worked like a charm.

For my future reference, is VC++ 8.0 included in Visual Studio 2005?

---

<div class="post-metadata">

**Author:** ![swozniak](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/e9a140/32.png) [@swozniak](https://www.ruby-forum.com/u/swozniak)\
**Post date:** [March 3, 2009, 4:55pm UTC](https://www.ruby-forum.com/t/windows-7-building-win32-api-gem/161882/4 "2009-03-03T16:55:56Z")

</div>

And BTW, would you mind sharing how to setup build environment and how  
to build extensions on windows? I am installing VS2005 as we speak

---

<div class="post-metadata">

**Author:** ![swozniak](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/e9a140/32.png) [@swozniak](https://www.ruby-forum.com/u/swozniak)\
**Post date:** [March 4, 2009, 2:04am UTC](https://www.ruby-forum.com/t/windows-7-building-win32-api-gem/161882/5 "2009-03-04T02:04:04Z")

</div>

Hi,

2009/3/4 Stanislaw W. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> And BTW, would you mind sharing how to setup build environment and how  
> to build extensions on windows? I am installing VS2005 as we speak

Build environment is just Visual Studio 2005 x64 command prompt.

The ruby 1.9.1p0 (2009-01-30 revision 21907) [x64-mswin64\_80]  
distribution lacks  
win32.h file in \include\ruby-1.9.1\ruby folder.  
Coping win32.h from ruby 1.9.1p0 source code to the above folder is  
required.

This subject is more suitable on win32utils-devel mailing list.  
Please join at [http://rubyforge.org/mail/?group\_id=85](http://rubyforge.org/mail/?group_id=85) for more  
discussion.

Regards,

Park H.
