From: Trilirium <tri...@ya...> - 2011-05-31 09:29:28
|
As for me, seems like an obscure bug in MinGW. Some dynamic symbols fail to export from C++ module! In the source: DL_EXPORT bool Prefix::mutateV (VType type, VDatum&val, Expr *args) { return false; } // Prefix::mutateV DL_EXPORT bool Prefix::mutateX (Expr *expr, Expr *args) { return false; } // Prefix::mutateX (Naturally, DL_EXPORT defined as: #define DL_EXPORT __declspec(dllexport) ) They seem to be assembled OK: .align 2 .globl __ZN6Prefix7mutateVE5VTypeR6VDatumP4Expr .def __ZN6Prefix7mutateVE5VTypeR6VDatumP4Expr; .scl 2; .type 32; .endef __ZN6Prefix7mutateVE5VTypeR6VDatumP4Expr: pushl %ebp movl %esp, %ebp movl $0, %eax popl %ebp ret .align 2 .globl __ZN6Prefix7mutateXEP4ExprS1_ .def __ZN6Prefix7mutateXEP4ExprS1_; .scl 2; .type 32; .endef __ZN6Prefix7mutateXEP4ExprS1_: pushl %ebp movl %esp, %ebp movl $0, %eax popl %ebp ret And included in the object nametable, too (nm dump fragment): 00001470 T __ZN6Prefix7mutateVE5VTypeR6VDatumP4Expr 0000147a T __ZN6Prefix7mutateXEP4ExprS1_ But... these symbols are NOT in the .drectve section! The most puzzling, when I compile these 2 methods separately -- everything is OK! What can be possible reason? (Using gcc 3.2.3 / mingw 200305-4-1, had no complains about it before...) |
From: Earnie <ea...@us...> - 2011-05-31 12:47:52
|
Trilirium wrote: > > But... these symbols are NOT in the .drectve section! > The most puzzling, when I compile these 2 methods separately -- > everything is OK! > What can be possible reason? > Optimizations maybe? If the functions are unused and you specify -fvtable-gc, --gc-sections or --param=iv-alyays-prune-cand-set-bound then it could be removed. Note -O2 and -O3 may implement these by default. -- Earnie -- http://www.for-my-kids.com |