MySql fordítás -- WTF

Mármint a fordítás ezzel áll meg:


/usr/local/src/mysql-5.5.38/include/my_global.h: In function 'my_ulonglong2double':
/usr/local/src/mysql-5.5.38/include/my_global.h:289:74: error: expected ')' before 'A'

A kérdéses haeaderben:


/* Go around some bugs in different OS and compilers */
#ifdef _AIX /* By soren@t.dk */
#define _H_STRINGS
#define _SYS_STREAM_H
/* #define _AIX32_CURSES */ /* XXX: this breaks AIX 4.3.3 (others?). */
#define ulonglong2double(A) my_ulonglong2double(A)
#define my_off_t2double(A)  my_ulonglong2double(A)
C_MODE_START
inline double my_ulonglong2double(unsigned long long A) { return (double A); }
C_MODE_END
#endif /* _AIX */

Ez most szándékos? Vagy lekváros?

Hozzászólások

inline double my_ulonglong2double(unsigned long long A) { return (double A); }

sort csere erre:

inline double my_ulonglong2double(unsigned long long A) { return ((double) A); }

--
Coding for fun. ;)

Egész jól haladtunk, idáig ért a folyamat, most linkelési hibák vannak (egy 'pfs' nevű programot kellene linkelni):


ld: 0711-317 ERROR: Undefined symbol: .sql_print_error(char const*, ...)
ld: 0711-317 ERROR: Undefined symbol: .Query_tables_list::destroy_query_tables_list()
ld: 0711-317 ERROR: Undefined symbol: .plugin_unlock_list(THD*, st_plugin_int**, unsigned int)

jo ez a 1980-as evekbol itt maradt AIX 0.12, igaz? ;-)

Ennek a komponensnek van hiányérzete:

 storage/perfschema/pfs_engine_table.cc

ezt hiányolja:

 _Z15sql_print_errorPKcz
 alias: sql_print_error(char const*, ...)

a 'log.cc'-ből kellene jönnie

Szerk: kevesebb lesz a hiba, ha beletesszük ezt is:

 ../../../sql/libsql.a 

Kezdem azt hinni, hogy ez a ki..tt cmake annyira flexibilis és felhasználóbarát, hogy ezzel én nem jutok semmire...

Még azt akartam volna kérdezni, hogy a libmysql_r.* változatok mire jók; változatos tippeket hallottam (reentráns kód(!), thread-safe kód), de a végső megfejtés az, hogy 5.5-től nincsenek, csak symlinkek a libmysql.*-ra.

(!): Az milyen lenne, hogy egy shared lib nem reentráns?!

Szerk: Oké, bizonyos kontextusban a reentráns azt jelenti, hogy thread-safe, szóval nyugiság és happység;)

Mangled:


_GLOBAL__FD_libaix_cctest1_so
_GLOBAL__FI_libaix_cctest1_so
_GLOBAL__F_cctest1.cc_349AB7FB_F0E1CF3F
_ZN5Torpe5TudorEPKc
_ZN5Torpe5TudorEi
_ZN5Torpe5VidorEv

Így csinálja a libtool:


/usr/bin/nm -B -BCpg .libs/orig_cctest1.o |
awk '{ if ((($ 2 == "T") || ($ 2 == "D") || ($ 2 == "B")) && (substr($ 3,1,1) != ".")) { 
    print $ 3 } 
}' | sort -u > .libs/liborig_cctest1.exp

Mondjuk a -C opciónál látok némi ellentétet AIX és GNU között, de az ilyesmi csak színesíti a dolgokat:

AIX!nm


-C Suppresses the demangling of C++ names. The default is to demangle all C++
symbol names.

linux!nm


-C Decode (demangle) low-level symbol names into user-level names...
   this makes C++ function names readable.

Újrakezdtem tiszta lappal a fordítást, így a hibák is újrakezdődtek:

exec(): 0509-036 Cannot load program ./comp_err because of the following errors:
        0509-150   Dependent module libcpotlas.so could not be loaded.
        0509-022 Cannot load module libcpotlas.so.
        0509-026 System error: A file or directory in the path name does not exist.

Hát természetesen az extra/comp_err című segéd-programot is Mekk Mester a cmake linkelte össze, hibányos blibpath-szal:


0      /opt/freeware/lib/gcc/powerpc-ibm-aix6.1.0.0/4.6.4:/opt/freeware/lib:/usr/lib:/lib
1                                    libcpotlas.so
2                                    libz.so
3                                    libpthreads.a       shr_comm.o
4                                    libpthreads.a       shr_xpg5.o
5                                    libc.a              shr.o
6                                    librtl.a            shr.o

Most éppen a 'myisam_ftdump' nem akar összeállni, unresolved externjei vannak, pl:


ld: 0711-317 ERROR: Undefined symbol: THR_THD
ld: 0711-317 ERROR: Undefined symbol: vtable for handler
ld: 0711-317 ERROR: Undefined symbol: key_map_empty
ld: 0711-317 ERROR: Undefined symbol: opt_myisam_use_mmap
ld: 0711-317 ERROR: Undefined symbol: handler::print_error(int, int)
ld: 0711-317 ERROR: Undefined symbol: handler::get_error_message(int, String*)
ld: 0711-317 ERROR: Undefined symbol: handler::column_bitmaps_signal()

na, most megint újrakezdtem, de úgy, hogy a /usr/include/fenv.h-ban elvégeztem az alábbi javítást:


- const fenv_t __fe_def_env = { FE_TONEAREST, 0, 0, 0, 0 };
+ extern const fenv_t __fe_def_env = { FE_TONEAREST, 0, 0, 0, 0 };

Ezzel sikeresen el is értem, hogy a mysqld-t ne tudja összelinkelni:


ld: 0711-224 WARNING: Duplicate symbol: .global constructors keyed to 65535_0___fe_def_env
ld: 0711-224 WARNING: Duplicate symbol: .global destructors keyed to 65535_1___fe_def_env
ld: 0711-224 WARNING: Duplicate symbol: __fe_def_env
ld: 0711-344 See the loadmap file loadmap for more information.
ld: 0711-317 ERROR: Undefined symbol: .fesetround(int)

A 'fesetround' függvény a libm.a(fenv.o)-ban lakik.

Szerk:
Csak nem megint a C++ keze tette be a lábát?
Az extern "C" kellene valahová?

Szerk:
Önmagában az extern a '__fe_def_env' előtt nem segít, ki kell szedni a kezdőértéket is.

jol jonne egy unsubscribe, mert rossz nezni hogy valaki erre pazarolja az idejet.