[LLVMdev] -O4 -fvisibility=hidden

Jack Howarth howarth at bromo.med.uc.edu
Sun Jan 25 10:00:29 PST 2009


On Sun, Jan 25, 2009 at 11:38:48AM +0100, Jean-Daniel Dupas wrote:
> 
> Le 25 janv. 09 à 06:01, Jack Howarth a écrit :
> 
> >   After trying the recommended use of -O4 -fvisibility=hidden to
> > compile xplor-nih with full LTO optimizations, I discovered three
> > symbols become undefined...
> >
> > llvm-gcc-4 -O4 -fvisibility=hidden -o xplor xplor.o  \
> > 	   \
> > 	  -L. -lxplorCmd -lxplor -L/Users/howarth/xplor-nih-2.21/ 
> > bin.Darwin_9_x86/ -lfft -lintVar -lvmd -lpy -lswigpy-xplor - 
> > ltclXplor -lswigtcl8-xplor -lnmrPot -lcommon -lmarvin  \
> > 	     -lcrypto  -L/sw/lib/llvm-gcc-4.2/lib -lgfortran -llapack - 
> > lblas   -L/Users/howarth/xplor-nih-2.21/bin.Darwin_9_x86/ \
> > 	
> > Undefined symbols:
> >  "_xplorwrapproc_slave_", referenced from:
> >      llvm bitcode in xplor.o
> >  "_python_interp_", referenced from:
> >      llvm bitcode in xplor.o
> >  "_tcl_interp_", referenced from:
> >      llvm bitcode in xplor.o
> > ld: symbol(s) not found
> >
> > These are all defined as extern as follows...
> >
> > extern "C" void
> > FORTRAN(tcl_interp)   (const long&          canReturn,
> >                             long&          qterm,
> >                             long&          fd)
> >
> > extern "C" void
> > FORTRAN(python_init)(const long&         argc,
> >                           char**        argv)
> >
> > extern "C" void FORTRAN(xplorwrapproc_slave)();
> >
> 
> defining them as extern is not enough to mark them as "exported".
> 
> You should use the visibility attribute.
> 
> extern "C" void FORTRAN(xplorwrapproc_slave)()  
> __attribute__((visibility("default")));
> 
> > The only symbols that become undefined are those extern
> > symbols which calling fortran routines from c++ code.
> > I'll look into creating a testcase and opening a PR for
> > this issue.
> >               Jack
> 
> 
> 
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

Jean-Daniel,
    Doing that changes the error messages into a bus
error on the darwin linker. I'll try using -fvisibility=
hidden first with current gcc trunk's compilers and come
back to llvm-gcc4.2 later. I noticed that there are
known issues with using -fvisibility with fortran...

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35827

I have removed all of the -fvisibility=hidden flags
from the gfortran compiles but wonder if this is still
an issue since the fortran calls are being accessed
from c++ files with the -fvisibility=hidden flag in
use. Perhaps PR35827 also includes fortran calls in
c++ not understanding the use of -fvisibility as
well as fortran code itself.
                   Jack




More information about the llvm-dev mailing list