[erlang-questions] nif problem in windows

韦崇焜 wckbluesky@REDACTED
Wed May 8 04:11:39 CEST 2013


hi, Janos

     I think the path is right, I also try to change the parameter "PathName" in erlang:load_nif(PathName, ....) to \\priv\\hello,  ./priv/hello,
but none of them works. And the file hello.dll does exists in path "./priv", if I delete it from this path, hello:init(). will return error message,
: "can not find the specific module", so I definitely sure that erlang has read the hello.dll successfully, but the file format is error.

      I was thinking that, whether I chose the wrong compile parameter when compile the hello.dll, but in the other hand, my computer reports
the same error when I  run the same code Dave gave to me, and he said it is works fine to him, I have no idead now.


From: Janos Hary
Date: 2013-05-08 01:06
To: 'wckbluesky'
CC: 'erlang-questions'
Subject: RE: [erlang-questions] nif problem in windows
Your error message says ‘priv/hello’. Check the path in your erlang:load_nif.
Janos
From: erlang-questions-bounces@REDACTED [mailto:erlang-questions-bounces@REDACTED] On Behalf Of ???
Sent: Tuesday, May 07, 2013 3:15 PM
To: Dave Cottlehuber
Cc: erlang-questions
Subject: Re: [erlang-questions] nif problem in windows
 
hi, Dave,
 
Thanks for you replying, I try your example and it is return the same error I wrote before, here is the output:
 
E:\firefox_download\hellonif-master>rebar.cmd compile
==> hellonif-master (compile)
Compiled src/hello.erl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.
 
hello.c
D:\Program Files (x86)\Microsoft Visual Studio 8\VC\INCLUDE\stdlib.h(215) : warn
ing C4255: '_get_purecall_handler' : no function prototype given: converting '()
' to '(void)'
d:\PROGRA~2\ERL510~1.1\erts-5.10.1\include\erl_nif.h(132) : warning C4820: '<unn
amed-tag>' : '4' bytes padding added after data member 'ref_bin'
c_src/hello.c(3) : warning C4100: 'argv' : unreferenced formal parameter
c_src/hello.c(3) : warning C4100: 'argc' : unreferenced formal parameter
c_src/hello.c(13) : warning C4013: 'memcpy' undefined; assuming extern returning
 int
Microsoft (R) Incremental Linker Version 8.00.50727.42
Copyright (C) Microsoft Corporation.  All rights reserved.
 
   正在创建库 priv/hello.lib 和对象 priv/hello.exp
 
 
E:\firefox_download\hellonif-master>erl -pa ebin
Eshell V5.10.1  (abort with ^G)
1> hello:init().
{error,{load_failed,"Failed to load NIF library priv/hello: 'Unspecified error'"
}}
2> hello:world().
"NIF library not loaded"
3>
 
 
Notice that, I change the code hello.erl slightly, it catch all the error when erlang:load_nif, I delete it, so it can output the error message
I using operating system win7, is it matters?
 
 



ckwei
 
From: Dave Cottlehuber
Date: 2013-05-07 19:37
To: erlang-questions
Subject: Re: [erlang-questions] nif problem in windows
On 7 May 2013 12:00, 韦崇焜 <wckbluesky@REDACTED> wrote:
hi

I am testing nif in windows right now, the nif c code is very simple and it is copyed directly from http://www.erlang.org/doc/tutorial/nif.html#id64988

All the code is running well in Linux, and c code is compiled to .so in linux, .dll in windows

Everything is ok before I running "c(complex6)" in erlang VM, in windows,

it reports

=ERROR REPORT==== 7-May-2013::17:36:19 ===
Error in process <0.70.0> with exit value: {{badmatch,{error,{load_failed,"Faile
d to load NIF library ./complex6_nif: 'Unspecified error'"}}},[{complex6,init,0,
[{file,"complex6.erl"},{line,7}]},{code_server,'-handle_on_load/4-fun-0-',1,[{fi
le,"code_server.erl"},...


=ERROR REPORT==== 7-May-2013::17:36:19 ===
The on_load function for module complex6 returned {{badmatch,
                                                    {error,
                                                     {load_failed,
                                                      "Failed to load NIF library ./complex6_nif: 'Unspecified error'"}}},
                                                   [{complex6,init,0,
                                                     [{file,...},{...}]},
                                                    {code_server,
                                                     '-handle_on_load/4-fun-0-',
                                                     1,
                                                     [{...}|...]}]}
{error,on_load_failure}

It is hard to find some useful information in google.
Can anyone tell how to fix it?
 
Hi ckwei,
 
It might be useful to paste some of the source code that isn't working for you. I don't have windows handy, but here's a NIF example that works on both Windows using command shell and SDK 7.1,  and LInux, that Volker & I did last year. The erlang side NIF loader was poached from one of Paul Davis' projects IIRC.
 
https://github.com/vmx/hellonif
 
A+
Dave
 
 
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20130508/271bc8da/attachment.htm>


More information about the erlang-questions mailing list