Re: Link error when calling C code

From: Mary Haley <haley_at_nyahnyahspammersnyahnyah>
Date: Tue Oct 29 2013 - 15:35:29 MDT

I think you are missing some options on the final "ld" line.

On my Mac, my "ld" line looks like this:

gcc -m64 -bundle -flat_namespace -undefined suppress WRAPIT.o -o ex01.so -lgfortran

Note I'm using "gcc" instead of "ld".

So, you may want to try:

gcc -m64 -bundle -flat_namespace -undefined suppress eemd_ncl_wrapper.o eemd.o -o eemd.so -lgfortran

The way I got at this compile line was by following the instructions at:

http://www.ncl.ucar.edu/Document/Tools/WRAPIT.shtml#Example_6

--Mary

On Oct 29, 2013, at 2:19 AM, Li Dong <dongli@lasg.iap.ac.cn> wrote:

> Dear NCL team,
>
> I have written a C code of EEMD method under Mac OS X 10.9. When I tried to call it from NCL, I followed the instruction of NCL website (http://www.ncl.ucar.edu/Document/Manuals/Ref_Manual/NclExtend.shtml#Example_6) by writing a wrapper. The codes I have now are:
>
> - eemd.c
> - eemd_ncl_wrapper.c
>
> and I ran the following commands:
>
> $ nhlcc -c eemd_ncl_wrapper.c
> gcc -DSYSV -D_XOPEN_SOURCE -DByteSwapped -D__UNIXOS2__ -DNeedFuncProto -ansi -fPIC -m64 -Wall -O -c eemd_ncl_wrapper.c -L<…>/ncl/6.1.2/lib -L/usr/X11R6/lib -I<…>/ncl/6.1.2/include -I/usr/X11R6/include -lhlu -lncarg -lncarg_gks -lncarg_c -lXpm -lX11 -lXext -lcairo -lfontconfig -lpixman-1 -lfreetype -lexpat -lpng -lz -lpthread -lbz2 -lXrender -lgfortran
> clang: warning: -lhlu: 'linker' input unused
> clang: warning: -lncarg: 'linker' input unused
> clang: warning: -lncarg_gks: 'linker' input unused
> clang: warning: -lncarg_c: 'linker' input unused
> clang: warning: -lXpm: 'linker' input unused
> clang: warning: -lX11: 'linker' input unused
> clang: warning: -lXext: 'linker' input unused
> clang: warning: -lcairo: 'linker' input unused
> clang: warning: -lfontconfig: 'linker' input unused
> clang: warning: -lpixman-1: 'linker' input unused
> clang: warning: -lfreetype: 'linker' input unused
> clang: warning: -lexpat: 'linker' input unused
> clang: warning: -lpng: 'linker' input unused
> clang: warning: -lz: 'linker' input unused
> clang: warning: -lpthread: 'linker' input unused
> clang: warning: -lbz2: 'linker' input unused
> clang: warning: -lXrender: 'linker' input unused
> clang: warning: -lgfortran: 'linker' input unused
> clang: warning: argument unused during compilation: ‘-L<…>/ncl/6.1.2/lib'
> clang: warning: argument unused during compilation: '-L/usr/X11R6/lib’
>
> $ nhlcc -c eemd.c
> gcc -DSYSV -D_XOPEN_SOURCE -DByteSwapped -D__UNIXOS2__ -DNeedFuncProto -ansi -fPIC -m64 -Wall -O -c eemd.c -L<…>/ncl/6.1.2/lib -L/usr/X11R6/lib -I<…>/ncl/6.1.2/include -I/usr/X11R6/include -lhlu -lncarg -lncarg_gks -lncarg_c -lXpm -lX11 -lXext -lcairo -lfontconfig -lpixman-1 -lfreetype -lexpat -lpng -lz -lpthread -lbz2 -lXrender -lgfortran
> clang: warning: -lhlu: 'linker' input unused
> clang: warning: -lncarg: 'linker' input unused
> clang: warning: -lncarg_gks: 'linker' input unused
> clang: warning: -lncarg_c: 'linker' input unused
> clang: warning: -lXpm: 'linker' input unused
> clang: warning: -lX11: 'linker' input unused
> clang: warning: -lXext: 'linker' input unused
> clang: warning: -lcairo: 'linker' input unused
> clang: warning: -lfontconfig: 'linker' input unused
> clang: warning: -lpixman-1: 'linker' input unused
> clang: warning: -lfreetype: 'linker' input unused
> clang: warning: -lexpat: 'linker' input unused
> clang: warning: -lpng: 'linker' input unused
> clang: warning: -lz: 'linker' input unused
> clang: warning: -lpthread: 'linker' input unused
> clang: warning: -lbz2: 'linker' input unused
> clang: warning: -lXrender: 'linker' input unused
> clang: warning: -lgfortran: 'linker' input unused
> clang: warning: argument unused during compilation: ‘-L<…>/ncl/6.1.2/lib'
> clang: warning: argument unused during compilation: '-L/usr/X11R6/lib’
>
> $ ld -o eemd.so eemd_ncl_wrapper.o eemd.o
> ld: warning: -macosx_version_min not specified, assuming 10.8
> Undefined symbols for architecture x86_64:
> "_NclGetArgValue", referenced from:
> _eemd_ncl_wrapper in eemd_ncl_wrapper.o
> "_NclRegisterFunc", referenced from:
> _Init in eemd_ncl_wrapper.o
> "_NclReturnValue", referenced from:
> _eemd_ncl_wrapper in eemd_ncl_wrapper.o
> "_NewArgs", referenced from:
> _Init in eemd_ncl_wrapper.o
> "_NhlPError", referenced from:
> _eemd_ncl_wrapper in eemd_ncl_wrapper.o
> "_SetArgTemplate", referenced from:
> _Init in eemd_ncl_wrapper.o
> "___bzero", referenced from:
> _eemd in eemd.o
> "___stack_chk_fail", referenced from:
> _eemd_ncl_wrapper in eemd_ncl_wrapper.o
> _Init in eemd_ncl_wrapper.o
> "___stack_chk_guard", referenced from:
> _eemd_ncl_wrapper in eemd_ncl_wrapper.o
> _Init in eemd_ncl_wrapper.o
> "_c_ftcurv", referenced from:
> _emd in eemd.o
> "_c_ftsetr", referenced from:
> _emd in eemd.o
> "_exit", referenced from:
> _emd in eemd.o
> "_free", referenced from:
> _emd in eemd.o
> _eemd in eemd.o
> "_log", referenced from:
> _randn in eemd.o
> "_log2", referenced from:
> _eemd in eemd.o
> "_malloc", referenced from:
> _emd in eemd.o
> _eemd in eemd.o
> "_memcpy", referenced from:
> _emd in eemd.o
> "_printf", referenced from:
> _emd in eemd.o
> "_rand", referenced from:
> _randn in eemd.o
> (maybe you meant: _randn)
> "_srand", referenced from:
> _eemd in eemd.o
> "_time", referenced from:
> _eemd in eemd.o
> "start", referenced from:
> implicit entry/start for main executable
> ld: symbol(s) not found for inferred architecture x86_64
>
> As you can see there are bunch of undefined symbols, so I added some libraries as:
>
> $ ld eemd_ncl_wrapper.o eemd.o -o eemd.so -lm -L<…>/ncl/6.1.2/lib -lngmath
> ld: warning: -macosx_version_min not specified, assuming 10.8
> Undefined symbols for architecture x86_64:
> "_NclGetArgValue", referenced from:
> _eemd_ncl_wrapper in eemd_ncl_wrapper.o
> "_NclRegisterFunc", referenced from:
> _Init in eemd_ncl_wrapper.o
> "_NclReturnValue", referenced from:
> _eemd_ncl_wrapper in eemd_ncl_wrapper.o
> "_NewArgs", referenced from:
> _Init in eemd_ncl_wrapper.o
> "_NhlPError", referenced from:
> _eemd_ncl_wrapper in eemd_ncl_wrapper.o
> "_SetArgTemplate", referenced from:
> _Init in eemd_ncl_wrapper.o
> "start", referenced from:
> implicit entry/start for main executable
> ld: symbol(s) not found for inferred architecture x86_64
>
> and more libraries, but more and more undefined symbols are reported, some of them are:
>
> “_nctypelen”, “_sd_ncvarinq”, “_seekgb”, “start”
>
> What can I do with these errors? Thank you in advance!
>
> Best regards,
>
> Li
> _______________________________________________
> ncl-talk mailing list
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk

_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Tue Oct 29 15:35:39 2013

This archive was generated by hypermail 2.1.8 : Fri Nov 01 2013 - 08:58:14 MDT