logo
Apache Lounge
Webmasters

 


About

Forum Index Downloads Search Register Log in  RSS Apache Lounge
 



Keep Server Online

If you find the Apache Lounge, the downloads and overall help useful, please express your satisfaction with a donation.

or

Bitcoin

A donation makes a contribution towards the costs, the time and effort that's going in this site and building.

Thank You! Steffen

Apache Lounge is not sponsored.

Your donations will help to keep this site alive and well, and continuing building binaries.



Has anyone created a simple mod from scratch on win32?
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Apache Forum Index -> Apache Building & Member Downloads



View previous topic :: View next topic  
Author Message
bruciebruce



Joined: 07 Nov 2006
Posts: 15
Location: On the beach in SoCal

PostPosted: Tue 07 Nov '06 4:06    Post subject: Has anyone created a simple mod from scratch on win32? Reply with quote

I tried to get the default example mod_foo.c to work, but I get these link errors:

C:\atest\foo>apxs -c -i -a mod_foo.c
cl /nologo /MD /W3 /O2 /D WIN32 /D _WINDOWS /D NDEBUG -I"C:\Apache2\include"
/c /Fomod_foo.lo mod_foo.c
mod_foo.c
link kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /libpath:"C:\Apa
che2\lib" /out:mod_foo.so mod_foo.lo
Creating library mod_foo.lib and object mod_foo.exp
mod_foo.lo : error LNK2019: unresolved external symbol __imp__ap_rputs@8 referen
ced in function _foo_handler
mod_foo.lo : error LNK2019: unresolved external symbol __imp__ap_hook_handler@16
referenced in function _foo_register_hooks
mod_foo.so : fatal error LNK1120: 2 unresolved externals
apxs:Error: Command failed with rc=6291456


Can anyone steer me in the right direction?
My apache is set up for mod_so. I compiled Apache 2.2.3 on windows xp
at the command prompt, because using Express C++ was a nightmare.
Back to top
tdonovan
Moderator


Joined: 17 Dec 2005
Posts: 610
Location: Milford, MA, USA

PostPosted: Tue 07 Nov '06 5:37    Post subject: Reply with quote

If you are using the apxs for Windows (from the Apache Lounge download area) - try adding the names of the Apache and APR libraries to your apxs command:
Code:
apxs -c -i -a mod_foo.c libapr-1.lib libaprutil-1.lib libapriconv-1.lib libhttpd.lib


The four libraries which start with "lib" are the ones you will most often need to build modules.
Quote:
Directory of C:\Apache2\lib\*.lib

09/28/2006 09:19a 1,377,454 apr-1.lib
09/28/2006 09:22a 1,245,064 aprutil-1.lib
09/28/2006 09:20a 93,360 libapr-1.lib
09/28/2006 09:20a 7,554 libapriconv-1.lib
09/28/2006 09:23a 52,002 libaprutil-1.lib
10/04/2006 07:25a 102,790 libhttpd.lib
09/28/2006 09:22a 441,982 xml.lib

If your module calls any functions named "XML_something", you may also need xml.lib.

-tom-
Back to top
bruciebruce



Joined: 07 Nov 2006
Posts: 15
Location: On the beach in SoCal

PostPosted: Tue 07 Nov '06 5:47    Post subject: That seems to have done it! Reply with quote

Tom,

I just ran what you suggested. Here is the output:

C:\atest\foo>apxs -c -i -a mod_foo.c libapr-1.lib libaprutil-1.lib libapriconv-1
.lib libhttpd.lib
cl /nologo /MD /W3 /O2 /D WIN32 /D _WINDOWS /D NDEBUG -I"C:\Apache2\include"
/c /Fomod_foo.lo mod_foo.c
mod_foo.c
link kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /libpath:"C:\Apa
che2\lib" /out:mod_foo.so mod_foo.lo libapr-1.lib libaprutil-1.lib libapricon
v-1.lib libhttpd.lib
Creating library mod_foo.lib and object mod_foo.exp
C:\Perl\bin\perl.EXE -MExtUtils::Command -e cp mod_foo.so C:\Apache2\modules
C:\Perl\bin\perl.EXE -MExtUtils::Command -e chmod 755 C:\Apache2\modules\mod_foo
.so
C:\Perl\bin\perl.EXE -MExtUtils::Command -e cp mod_foo.lib C:\Apache2\lib
C:\Perl\bin\perl.EXE -MExtUtils::Command -e chmod 755 C:\Apache2\lib\mod_foo.lib

[activating module `foo' in C:\Apache2\conf\httpd.conf][color=blue]


Thanks for the info. I would not have found these references otherwise!
Very Happy
Back to top
bruciebruce



Joined: 07 Nov 2006
Posts: 15
Location: On the beach in SoCal

PostPosted: Tue 07 Nov '06 16:17    Post subject: Reply with quote

Hi,

I spoke prematurely...I get this error now when I invoke httpd at the command prompt:

RuntimeError!
Program:c:\apache2\bin\httpd.exe

R6034
An application has made an attempt to load the C runtime library incorrectly.


In the directory c:\apache2\modules there is the file mod_foo.so
but there is no mod_foo.pdb file. All of the other *.so files have corresponding *.pdb files
What is with that? Do I need this pdb creature?

Also, mod_foo.lib now appears also in \apache2\lib.

I am not loading something...

Thanks again!
Back to top
bruciebruce



Joined: 07 Nov 2006
Posts: 15
Location: On the beach in SoCal

PostPosted: Tue 07 Nov '06 16:28    Post subject: Reply with quote

Here is error result after the windows error dialog disappears:

C:\>httpd
httpd: Syntax error on line 115 of C:/Apache2/conf/httpd.conf: Cannot load C:/Apache2/modules/mod_foo.so into server: A dynamic link library (DLL) initialization routine failed.
Back to top
Jorge



Joined: 12 Mar 2006
Posts: 376
Location: Belgium

PostPosted: Tue 07 Nov '06 18:06    Post subject: Reply with quote

bruciebruce wrote:

What is with that? Do I need this pdb creature?

pdb files contain debug information, you don't need them and i remove them from my system. And when i need to debug I use a different apache instant anyway.
Back to top
bruciebruce



Joined: 07 Nov 2006
Posts: 15
Location: On the beach in SoCal

PostPosted: Tue 07 Nov '06 19:06    Post subject: Reply with quote

I remember this error number from microsofty before when I was struggling
with the "regular" apache build. It had to do with the non-existence of a manifest file. I tried copying the mod_foo manifest to different locations in my apache tree but without any new results.
Back to top
tdonovan
Moderator


Joined: 17 Dec 2005
Posts: 610
Location: Milford, MA, USA

PostPosted: Tue 07 Nov '06 21:03    Post subject: Reply with quote

I suggest you try building modules/echo/mod_echo.c using the command
Code:
apxs -c -i -a mod_echo.c libapr-1.lib libaprutil-1.lib libapriconv-1.lib libhttpd.lib
and see if you have the same problem.

FYI - here are some directives to set up mod_echo on port 81 for connections from localhost
Code:
LoadModule echo_module        "modules/mod_echo.so"
<IfModule echo_module>
    Listen localhost:81
    <VirtualHost localhost:81>
        ProtocolEcho On
    </VirtualHost>
</IfModule>

To test mod_echo, you can use telnet to port 81. Each line you type should be echoed:
Quote:
C:\> telnet localhost 81
hello
goodbye
ctrl-] quit

C:\>


If mod_echo does not have the same problem, then it is probably something in your mod_foo code.
Is mod_foo your own code or did you download it from somewhere?

-tom-
Back to top
bruciebruce



Joined: 07 Nov 2006
Posts: 15
Location: On the beach in SoCal

PostPosted: Tue 07 Nov '06 21:27    Post subject: Reply with quote

I will try what you suggested...

Here is how I generated mod_foo.c

apxs -g -n foo


to quote,

"Template Generation Options

-g
This generates a subdirectory name (see option -n) and there two files: A sample module source file named mod_name.c which can be used as a template for creating your own modules or as a quick start for playing with the apxs mechanism. And a corresponding Makefile for even easier build and installing of this module. "


Thx again!!
Back to top
bruciebruce



Joined: 07 Nov 2006
Posts: 15
Location: On the beach in SoCal

PostPosted: Tue 07 Nov '06 21:49    Post subject: Reply with quote

Hi again,

I get exactly the same error. I guess I should read up this stuff... Sad

C:\atest\echo>httpd
httpd: Syntax error on line 116 of C:/Apache2/conf/httpd.conf: Cannot load C:/Apache2/modules/mod_echo.so into server: A dynamic link library (DLL) initialization routine failed.
Back to top
Steffen
Moderator


Joined: 15 Oct 2005
Posts: 2581
Location: Hilversum, NL, EU

PostPosted: Tue 07 Nov '06 22:36    Post subject: Reply with quote

There should be more info about the error in the windows Event Viewer.


Steffen
Back to top
bruciebruce



Joined: 07 Nov 2006
Posts: 15
Location: On the beach in SoCal

PostPosted: Tue 07 Nov '06 22:54    Post subject: Reply with quote

Steffen,

Nothing is either put into the application or system event viewer console after
this is invoked.

-B
Back to top
tdonovan
Moderator


Joined: 17 Dec 2005
Posts: 610
Location: Milford, MA, USA

PostPosted: Tue 07 Nov '06 23:36    Post subject: Reply with quote

Often that error means that mod_foo.so depends on a .dll which cannot be found.

If you have installed the Platform SDK, it has a Dependency Walker utility which is helpful for problems like this.
The default location for it is
C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin\Depends.exe

You should
    make sure only the correct Apache /bin directory is in your PATH

    C:\> Depends.exe C:\Apache2\modules\mod_foo.so
to check which DLLs are required by mod_foo.so. Use F9 to show the full path of these DLLs.

You should expect to see libhttpd.dll and MSVCR80.dll as dependencies with a minimal module if you haven't added any code to it yet.

Hope this helps.
-tom-
Back to top
Steffen
Moderator


Joined: 15 Oct 2005
Posts: 2581
Location: Hilversum, NL, EU

PostPosted: Tue 07 Nov '06 23:38    Post subject: Reply with quote

Do you use Visual c++ 2005 to build the mod ?

The Apache you are running is also build with Visual c++ 2005 ?


Steffen
Back to top
bruciebruce



Joined: 07 Nov 2006
Posts: 15
Location: On the beach in SoCal

PostPosted: Tue 07 Nov '06 23:44    Post subject: Reply with quote

Steffen,

I used the advice that I found here on your forum to build Apache 2.2.3 at the command prompt but had link problems within Express C++ (and so gave up on using the IDE).

This is XP Pro Bug Fix 2 (oops is that a Service Pack? (lol))
Back to top
bruciebruce



Joined: 07 Nov 2006
Posts: 15
Location: On the beach in SoCal

PostPosted: Tue 07 Nov '06 23:58    Post subject: Reply with quote

Tom,

That is some cool tool!

Those files you wanted are there. The only error involved a missing msjava.dll which I can't see as being relevant.

The bottom part of the screen said this:

Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.


But...these are just warnings.

Humm....
Back to top
bruciebruce



Joined: 07 Nov 2006
Posts: 15
Location: On the beach in SoCal

PostPosted: Wed 08 Nov '06 0:01    Post subject: Reply with quote

Tom,

Should I not be linking with the kernel32.lib or is this a lame question?

-B
Back to top
tdonovan
Moderator


Joined: 17 Dec 2005
Posts: 610
Location: Milford, MA, USA

PostPosted: Wed 08 Nov '06 15:12    Post subject: Reply with quote

msjava.dll? Yikes! Where did that come from?

Linking with kernel32.lib shouldn't cause any problems, but that Windows library is usually implicit - you shouldn't need to specify it directly.

A couple of possibilities:

    You have something in your PATH, LIB, or INCLUDE environment variables which causes this to be linked into mod_foo

    One of these variables included some software which uses a different version of the APR (Apache Portable Runtime) when you built mod_foo.

    Your PATH env var includes some software which uses a different version of the APR when you start httpd.exe.

My post Another set of VC++ 2005 command-line build instructions shows what should be in these vars when you build Apache (or when you build modules).
You won't need GnuWin32, MinGW, or NASM to build a module - but check that you don't have something else in there which is causing this dependency.

-tom-
Back to top
bruciebruce



Joined: 07 Nov 2006
Posts: 15
Location: On the beach in SoCal

PostPosted: Wed 08 Nov '06 20:25    Post subject: Reply with quote

Tom,

Here is my devel path that I used for building apache 2.2.3 and compiling mod_foo

Path=C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin;C:\P
rogram Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin\WinNT;C:\Prog
ram Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visua
l Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools;C:\Pr
ogram Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Fram
ework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;C:\mas
m32\bin;C:\awk;C:\Perl\bin;C:\apps\php-5.1.6;C:\apps\jdk1.5.0_06\bin;C:\apps\Act
iveState Komodo 3.5\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\
Program Files\ATI Technologies\ATI Control Panel;C:\Program Files\Microsoft SQL
Server\80\Tools\BINN;C:\apps\Python24;C:\apps\Django-0.91\django\bin;C:\devel\an
t\apache-ant-1.6.5\bin;C:\devel\clisp-2.39;C:\Apache2\bin;C:\apps\libtool\bin;C:
\Program Files\Novosoft\C2J\Bin;C:\devel\jwsdp-1.6\jwsdp-shared\bin;C:\devel\jws
dp-1.6\jwsdp-shared\bin;C:\devel\jwsdp-1.6\jwsdp-shared\bin;C:\apps\curl;


Here is my "normal" path that I use to invoke httpd

Path=C:\masm32\bin;C:\awk;C:\Perl\bin;C:\apps\php-5.1.6;C:\apps\jdk1.5.0_06\bin;
C:\apps\ActiveState Komodo 3.5\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System
32\Wbem;C:\Program Files\ATI Technologies\ATI Control Panel;C:\Program Files\Mic
rosoft SQL Server\80\Tools\BINN;C:\apps\Python24;C:\apps\Django-0.91\django\bin;
C:\devel\ant\apache-ant-1.6.5\bin;C:\devel\clisp-2.39;C:\Apache2\bin;C:\apps\lib
tool\bin;C:\Program Files\Novosoft\C2J\Bin;C:\devel\jwsdp-1.6\jwsdp-shared\bin;C
:\devel\jwsdp-1.6\jwsdp-shared\bin;C:\devel\jwsdp-1.6\jwsdp-shared\bin;C:\apps\c
url;

Both of these were gotten from a "set" at the command prompt (and not
by using the control panel...).
Back to top
bruciebruce



Joined: 07 Nov 2006
Posts: 15
Location: On the beach in SoCal

PostPosted: Wed 08 Nov '06 20:46    Post subject: Reply with quote

I notice now that the manifests are different for httpd and mod_foo for the VC80 ... CRT file.

mod_foo.so.manifest :

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>

and for httpd.exe.manifest

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>

Is this an "issue"?
Back to top


Post new topic   Reply to topic    Apache Forum Index -> Apache Building & Member Downloads Goto page 1, 2  Next
Page 1 of 2