You are viewing a plain text version of this content. The canonical link for it is here.
Posted to embperl@perl.apache.org by "Hemond, Steve" <SH...@SMURFIT.com> on 2004/02/05 16:28:15 UTC
HTML::Embperl make fails <-- SOLVED ON AIX?
Hi Gerald and everybody,
As you know I had a lot of problems building Embperl on Aix. I've managed to build everything correctly but DIDN'T TEST IT YET with Apache2/mod_perl2.
I have a LOT OF QUESTIONS and hope to get some answers. :-)
I first tried to build Embperl from CPAN:
'install HTML::Embperl'
It fetches the files and extracts them in cpan builds directory. Fine. Then I assume it runs 'perl Makefile.PL' and execute it soon after (AM I RIGHT ABOUT THIS?)
When compiling from CPAN, i get to many typemap errors :
/usr/local/bin/perl /usr/local/lib/perl5/5.8.2/ExtUtils/xsubpp -typemap /usr/local/lib/perl5/5.8.2/ExtUtils/typemap -typemap typemap xs/Embperl/App/App.xs > xs/Embperl/App/App.xsc && mv xs/Embperl/App/App.xsc xs/Embperl/App/App.c Can't find typemap in /root/.cpan/build/Embperl-2.0b10/xs/Embperl/App
*** Error code 2
Every subdirectory under /xs/ has the same problem, so I had to go under :
/App
/Component
/Req
/Syntax
/Thread
And do 'perl Makefile.PL && make'
(NOTE that I ran 'clean HTML::Embperl' in CPAN shell to be able to 'make HTML::Embperl' again, and I ran these makes AFTER the clean)
First, why I have to manually compile everything under the xs directories by hand? I noticed that running the Makefile only creates a .c file? Could anyone explain me what is the use of directories under /xs?
Ok. After compiling in these subdirectories by hand, I ran 'make HTML::Embperl' again. Now I have another problem. All the .c files under /xs subdirectories reference to some header files in the top-level source directory:
snippet from a .c file under /xs/App/ directory :
#include "ep.h"
#include "epmacro.h"
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "eptypes.h"
#include "eppublic.h"
#include "epdat2.h"
#include "ep_xs_sv_convert.h"
#include "ep_xs_typedefs.h"
When running 'make HTML::Embperl' in CPAN shell, these .h files aren't found and it returns errors. However, when running make on the top-level Makefile to install Embperl by hand, I have NO SUCH ERRORS. Could anyone tell me what makes the difference here?
To solve my problem (I wanted to build Embperl with CPAN at all cost) : I copied the top-level header files (ep.h, epmacro.h, etc.) to EACH /xs subdirectory and their respective /Config subdirectory. Could I have done that more intelligently? (ex. make it look in the top-level directory to find the header files?)
Running 'make HTML::Embperl' was then compiling these .c correctly. GOOD!
The last error I got was missing symbols :
Writing Embperl.bs
chmod 644 Embperl.bs
rm -f blib/arch/auto/Embperl/Embperl.so
LD_RUN_PATH="" ld -bhalt:4 -bM:SRE -bI:/usr/local/lib/perl5/5.8.3/aix/CORE/perl.exp -bE:Embperl.exp -bnoentry -lc -L/usr/local/lib Embperl.o epmain.o epio.o epchar.o eputil.o epeval.o epmem.o epinit.o epcgiinit.o epcmd2.o epparse.o epdom.o epcomp.o epcache.o epprovider.o mod_embperl.o epapfilter.o xs/Embperl/App/App.o xs/Embperl/App/Config/Config.o xs/Embperl/Component/Component.o xs/Embperl/Component/Config/Config.o xs/Embperl/Component/Param/Param.o xs/Embperl/Component/Output/Output.o xs/Embperl/Req/Req.o xs/Embperl/Req/Config/Config.o xs/Embperl/Req/Param/Param.o xs/Embperl/Thread/Thread.o xs/Embperl/Syntax/Syntax.o -brtl -L/usr/local/lib -b32 -o blib/arch/auto/Embperl/Embperl.so
ld: 0711-317 ERROR: Undefined symbol: .apr_palloc
ld: 0711-317 ERROR: Undefined symbol: .ap_rputc
ld: 0711-317 ERROR: Undefined symbol: .ap_rflush
ld: 0711-317 ERROR: Undefined symbol: .ap_rwrite
ld: 0711-317 ERROR: Undefined symbol: .ap_setup_client_block
ld: 0711-317 ERROR: Undefined symbol: .ap_should_client_block
ld: 0711-317 ERROR: Undefined symbol: .ap_get_client_block
ld: 0711-317 ERROR: Undefined symbol: .apr_pstrdup
ld: 0711-317 ERROR: Undefined symbol: .apr_table_add
ld: 0711-317 ERROR: Undefined symbol: .apr_table_set
ld: 0711-317 ERROR: Undefined symbol: .apr_table_elts
ld: 0711-317 ERROR: Undefined symbol: .ap_log_error
ld: 0711-317 ERROR: Undefined symbol: .ap_hook_open_logs
ld: 0711-317 ERROR: Undefined symbol: .ap_exists_config_define
ld: 0711-317 ERROR: Undefined symbol: .apr_pool_create_ex
ld: 0711-317 ERROR: Undefined symbol: .ap_add_version_component
ld: 0711-317 ERROR: Undefined symbol: .apr_table_get
ld: 0711-317 ERROR: Undefined symbol: .apr_table_do
ld: 0711-317 ERROR: Undefined symbol: .ap_sub_req_lookup_uri
ld: 0711-317 ERROR: Undefined symbol: .apr_pstrcat
ld: 0711-317 ERROR: Undefined symbol: .ap_sub_req_lookup_file
ld: 0711-317 ERROR: Undefined symbol: .ap_run_sub_req
ld: 0711-317 ERROR: Undefined symbol: .ap_destroy_sub_req
ld: 0711-317 ERROR: Undefined symbol: .apr_brigade_destroy
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
make: The error code from the last command is 8.
As Gerald told me, it is probably a linker issue, maybe because the Aix ld doesn't work the same way? (why anyway?)
That were I was really stucked building Embperl from CPAN. So I resigned to build Embperl directly from the sources, and modify the top-level Makefile to add the missing symbols :
Snippet from the top-level Makefile that I had modified :
LD = ld
LDDLFLAGS = -bhalt:4 -bM:SRE -bI:$(PERL_INC)/perl.exp /usr/local/apache2/lib/apr.exp /usr/local/apache2/lib/aprutil.exp /usr/local/apache2/modules/httpd.exp -bE:$(BASEEXT).exp -bnoentry -lc -L/usr/local/lib
I added every .exp file found under my apache2 directory (apr.exp, aprutil.exp and httpd.exp)
Could you explain what .exp file are and why the few found under /apache2/ are related to Embperl. I know that they are 'symbol files' but what is the big deal with symbol files? (I have a little experience with C)
I ran make again and it compiled and linked everything smoothly. I soon after ran 'make install' and I will test Embperl later today.
Here is the summary of questions I would like to have answers :
1. What's the advantage of Makefile.PL files? Could you have written only a simple Makefile?
2. What is the use of all the .c files (generated by Makefile) under /xs subdirectories (/App, /Component, /Syntax, etc)
3. Why I have to manually build the .c files in these subdirectories before building from CPAN and I am not required to do so if I compile Embperl myself?
4. Why did I have to copy the top-level header files (ep.h, epmacro.h, etc) in these subdirectories for CPAN to compile correctly and I were not required to do so when compiling Embperl myself?
5. Could I had fixed the missing header files by making CPAN look in the top-level directory? How?
6. What are .exp files. Why does Embperl need to be linked with .exp files found under /Apache2/, what is the big deal behind .exp files?
You might want to answer "Look, it works if you build Embperl yourself, why bother with CPAN?"
I just want to UNDERSTAND in what CPAN builds the software differently. As far as I know, It would use the SAME top-level Makefile to build Embperl; I don't understand why building from CPAN forces me to compile /xs subdirectories by and and gives me missing headers errors, and running the Makefile manually don't return me these errors.
Well, if I have answer to these 6 main questions, I will feel better and maybe sleep better tonight :-)
I will test Embperl against Apache2/mod_perl2 on this Aix box later today. Will keep you posted.
Thank you VERY MUCH for your great support and for taking time to answer my questions. It is very appreciated.
Best regards,
Steve Hemond
Programmeur Analyste / Analyst Programmer
Smurfit-Stone, Ressources Forestières
La Tuque, P.Q.
Tel.: (819) 676-8100 X2833
shemond@smurfit.com
---------------------------------------------------------------------
To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-help@perl.apache.org
Re: HTML::Embperl make fails <-- SOLVED ON AIX?
Posted by Gerald Richter <ri...@ecos.de>.
>
> Here is the summary of questions I would like to have answers :
>
> 1. What's the advantage of Makefile.PL files? Could you have written
> only a simple Makefile?
Makefile.PL is the standard Perl way to generate a OS specify Makefile.
(Most non Perl application use configure for that purpose, basicly both do
the same).
> 2. What is the use of all the .c files (generated by Makefile) under
> /xs subdirectories (/App, /Component, /Syntax, etc)
They are the interface between the C Part of Embperl and the Perl
> 3. Why I have to manually build the .c files in these subdirectories
> before building from CPAN and I am not required to do so if I compile
> Embperl myself?
That's because a module (ExtUtils::MakeMaker) that Makefile.PL uses to
generate the Makefile, has changed in recent version of Perl and has changed
the order in which things are compiled. On most system the files in the xs
subdirectory get compiled first and everthing is fine, but on BSD and AIX
the file in the root directory get compiled first, which fails, because they
depends on files in the xs directory. I have fixed this, but because of the
change in MakeMaker I have to create a new fix for Perl 5.8.x.
> 4. Why did I have to copy the top-level header files (ep.h,
> epmacro.h, etc) in these subdirectories for CPAN to compile correctly
> and I were not required to do so when compiling Embperl myself?
Normaly you shouldn't need to do this.There seems some problem with include
paths on AIX.
> 5. Could I had fixed the missing header files by making CPAN look in
> the top-level directory? How?
There will be a way to fix this, but I don't know how yet.
> 6. What are .exp files. Why does Embperl need to be linked with .exp
> files found under /Apache2/, what is the big deal behind .exp files?
Most Unix store the information about functions that are availabe inside a
library file in the file itself, on AIX they are stre in the exp files. The
linker needs the exp files to find the correct entry point for functions
inside a library.
>
>
> You might want to answer "Look, it works if you build Embperl
> yourself, why bother with CPAN?"
>
CPAN, basicly does the same as you should do manualy. The extra steps you
need to do are only AIX specific problems and I hope we can sort them out
and fix it.
> I just want to UNDERSTAND in what CPAN builds the software
> differently. As far as I know, It would use the SAME top-level
> Makefile to build Embperl; I don't understand why building from CPAN
> forces me to compile /xs subdirectories by and and gives me missing
> headers errors, and running the Makefile manually don't return me
> these errors.
>
> Well, if I have answer to these 6 main questions, I will feel better
> and maybe sleep better tonight :-)
>
I hope my answer make a little sense to you
Gerald
> I will test Embperl against Apache2/mod_perl2 on this Aix box later
> today. Will keep you posted.
>
> Thank you VERY MUCH for your great support and for taking time to
> answer my questions. It is very appreciated.
>
> Best regards,
>
> Steve Hemond
> Programmeur Analyste / Analyst Programmer
> Smurfit-Stone, Ressources Forestières
> La Tuque, P.Q.
> Tel.: (819) 676-8100 X2833
> shemond@smurfit.com
--------------------------------------------------------------
Gerald Richter ecos electronic communication services gmbh
IT-Securitylösungen * dynamische Webapplikationen * Consulting
Post: Tulpenstrasse 5 D-55276 Dienheim b. Mainz
E-Mail: richter@ecos.de Voice: +49 6133 939-122
WWW: http://www.ecos.de/ Fax: +49 6133 939-333
--------------------------------------------------------------
|
| ECOS BB-5000 Firewall- und IT-Security Appliance: www.bb-5000.info
|
+-------------------------------------------------------------
---------------------------------------------------------------------
To unsubscribe, e-mail: embperl-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-help@perl.apache.org