[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: libtool & GCC 3.0
From: |
Robert Boehne |
Subject: |
Re: libtool & GCC 3.0 |
Date: |
Fri, 27 Jul 2001 12:00:48 -0500 |
Steve:
The patch looks fine to me, does anyone else object to it?
I would really like to know why anyone would declare main() as
returning char, but there must have been some reason for it, right?
Anybody know of such a reason? I'd like to hear it.
Robert
Steve Ellcey wrote:
>
> I was testing libtool with GCC 3.0 and ran into a configuration problem.
> I finally tracked it down to a problem with declaring main to be of type
> "char", older GCC's allowed this, GCC 3.0 does not.
>
> At around line 3928 of configure a C++ program is generated that
> contains a table with symbol names extracted from another program. Here
> is the program that my configure run generated:
>
> #ifdef __cplusplus
> extern "C" {
> #endif
>
> extern char nm_test_var;
> extern char main();
> extern char nm_test_func();
> #if defined (__STDC__) && __STDC__
> # define lt_ptr_t void *
> #else
> # define lt_ptr_t char *
> # define const
> #endif
>
> /* The mapping between symbol names and symbols. */
> const struct {
> const char *name;
> lt_ptr_t address;
> }
> lt_preloaded_symbols[] =
> {
> {"nm_test_var", (lt_ptr_t) &nm_test_var},
> {"main", (lt_ptr_t) &main},
> {"nm_test_func", (lt_ptr_t) &nm_test_func},
> {0, (lt_ptr_t) 0}
> };
>
> #ifdef __cplusplus
> }
> #endif
>
> When this program is compiled with g++ 3.0 I get the following:
>
> [hpsje] $ g++ -c conftest.cc
> conftest.cc:6: `main' must return `int'
>
> And g++ returns an exit code of 1.
>
> This messes up the rest of my configure/build resulting in a bad
> libtool. This can be fixed by modifying
> lt_cv_sys_global_symbol_to_cdecl to declare things to be "int" instead
> of "char". Does that sound like the right fix?
>
> Here is a patch that can be used, if people think this is the right
> fix, I do not have write permission to CVS:
>
> 2001-07-25 Steve Ellcey <address@hidden>
>
> * libtool.m4 (lt_cv_sys_global_symbol_to_cdecl): Change it from
> "extern char" to "extern int" so that GCC 3.0 won't complain and
> refuse to compile programs containing "extern char main()".
>
> *** libtool.m4.orig Wed Jul 25 10:54:14 2001
> --- libtool.m4 Wed Jul 25 10:37:05 2001
> *************** AC_CACHE_VAL([lt_cv_sys_global_symbol_pi
> *** 3583,3589 ****
> symxfrm='\1 \2\3 \3'
>
> # Transform an extracted symbol line into a proper C declaration
> ! lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char
> \1;/p'"
>
> # Transform an extracted symbol line into symbol name and symbol address
> lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/
> {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/
> {\"\2\", (lt_ptr) \&\2},/p'"
> --- 3583,3589 ----
> symxfrm='\1 \2\3 \3'
>
> # Transform an extracted symbol line into a proper C declaration
> ! lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int
> \1;/p'"
>
> # Transform an extracted symbol line into symbol name and symbol address
> lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/
> {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/
> {\"\2\", (lt_ptr) \&\2},/p'"
> *************** cygwin* | mingw* | pw32*)
> *** 3597,3603 ****
> [symcode='[ABCDGISTW]']
> ;;
> hpux*) # Its linker distinguishes data from code symbols
> ! lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char
> \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
> lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/
> {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/
> {\"\2\", (lt_ptr) \&\2},/p'"
> ;;
> irix*)
> --- 3597,3603 ----
> [symcode='[ABCDGISTW]']
> ;;
> hpux*) # Its linker distinguishes data from code symbols
> ! lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int
> \1();/p' -e 's/^$symcode* .* \(.*\)$/extern int \1;/p'"
> lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/
> {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/
> {\"\2\", (lt_ptr) \&\2},/p'"
> ;;
> irix*)
>
> _______________________________________________
> Libtool-patches mailing list
> address@hidden
> http://mail.gnu.org/mailman/listinfo/libtool-patches
--
Robert Boehne Software Engineer
Ricardo Software Chicago Technical Center
TEL: (630)789-0003 x. 238
FAX: (630)789-0127
email: address@hidden