Re: Link error when calling C code

From: Li Dong <dongli_at_nyahnyahspammersnyahnyah>
Date: Tue Oct 29 2013 - 19:04:17 MDT

Dear Mary,

Thank you! This solve my problem!

Best regards,

Li

On 2013年10月30日, at 上午5:35, Mary Haley <haley@ucar.edu> wrote:

> 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 19:04:46 2013

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