<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1888636973;
        mso-list-type:hybrid;
        mso-list-template-ids:-1144733150 -1526688632 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
        {mso-level-start-at:0;
        mso-level-number-format:bullet;
        mso-level-text:-;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Calibri","sans-serif";
        mso-fareast-font-family:Calibri;
        mso-bidi-font-family:"Times New Roman";}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>Hi,<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I am trying to use the RTEMS NFS Client with a POWER PC on RTEMS 4.9.2. I know it is old, but unfortunately our company is not ready to upgrade yet. <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>---- Our Design ----<o:p></o:p></p><p class=MsoNormal>We don't expose the RTEMS command line in our program, so we would like to be able to use the nfs interface directly. The RTEMS libs provides librtemsNfs.h which contains functions for implementing nfs clients. The implementations for these functions are in nfs.c which is compiled to create 1 of 2 libs:<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='mso-list:Ignore'>-<span style='font:7.0pt "Times New Roman"'>        </span></span><![endif]>libnfs.a<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='mso-list:Ignore'>-<span style='font:7.0pt "Times New Roman"'>        </span></span><![endif]>nfs.rel<o:p></o:p></p><p class=MsoNormal>Both are needed to build. As part of our code we are using the function nfsInit(... which is declared in librtemsNfs.h and defined in nfs.c.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>---- The error ----<o:p></o:p></p><p class=MsoNormal>So the error is pretty obvious. When we build we get the linker error:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>D:\Git\nfs_stuff\Src\RTEMS_proj/init/srvinit.cpp:453: undefined reference to `nfsInit(int, int)'<o:p></o:p></p><p class=MsoNormal>collect2: ld returned 1 exit status<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>---- Attempts to link these libraries ----<o:p></o:p></p><p class=MsoNormal>In order to link these we have tried multiple ways: <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The recommended method is to link with –lnfs:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>    XCPPFLAGS += -lnfs<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> and doing so yields a nice long and complex build command:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>    powerpc-rtems4.9-g++ -g -Wall -g -mcpu=603e -mstrict-align -meabi -msdata -fno-common ... -MANY_PREPROCESSOR_ARGUMENTS ... -MANY_INCLUDE_FILES ... Map=./exe/srvevp.map -lc -lm --gc-sections -lnfs -mcpu=603e -mstrict-align -meabi ... -MANY_OBJECT_FILES ... ./exe/obj/srvinit.o ... -MANY_MORE_OBJECT_FILES<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Our compile and link command has -lnfs, before the inclusion of the offending object file (srvinit.o). But we still get the linker error.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I tried to link by path directly to the .a and .rel file. First I did this:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>    NFS_LIB = $(RTEMS_MAKEFILE_PATH)/lib/libnfs.a<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>    NFS_REL_LIB = $(RTEMS_MAKEFILE_PATH)/lib/nfs.rel<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white'>    LINK_OBJS +=  $(NFS_LIB) $(NFS_REL_LIB)</span> <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>We also did this by adding: /c/rtems-4.9/powerpc-rtems4.9/5200/lib/libnfs.a /c/rtems-4.9/powerpc-rtems4.9/5200/lib/nfs.rel to the command line. We added it both before and after the offending object file. We also tried with the -L command to force linking by path. All of this results in the same error.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>---- Some other information ----<o:p></o:p></p><p class=MsoNormal>When removing the direct link of the libnfs.a (from LINK_OBJS) we lose the ability to build even without direct use of the nfs client functions. This is very odd, it seems to me you should only need to the -lnfs to build the command line options, but even without this flag it builds successfully. Without the direct include we get the error:<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>c:/rtems-4.9/powerpc-rtems4.9/5200/lib\librtemscpu.a(libshell_a-main_mount_nfs.o): In function `rtems_shell_nfs_mounter':<o:p></o:p></p><p class=MsoNormal>e:\CCNET\rtems-4.9\Trunk\build_5200\powerpc-rtems4.9\c\adept_5200\cpukit\libmisc/../../../../../../rtems-4.9.2/c/src/../../cpukit/libmisc/shell/main_mount_nfs.c:46: undefined reference to `rpcUdpInit'<o:p></o:p></p><p class=MsoNormal>e:\CCNET\rtems-4.9\Trunk\build_5200\powerpc-rtems4.9\c\5200\cpukit\libmisc/../../../../../../rtems-4.9.2/c/src/../../cpukit/libmisc/shell/main_mount_nfs.c:51: undefined reference to `nfsInit'<o:p></o:p></p><p class=MsoNormal>e:\CCNET\rtems-4.9\Trunk\build_5200\powerpc-rtems4.9\c\5200\cpukit\libmisc/../../../../../../rtems-4.9.2/c/src/../../cpukit/libmisc/shell/main_mount_nfs.c:58: undefined reference to `nfsMount'<o:p></o:p></p><p class=MsoNormal>collect2: ld returned 1 exit status<o:p></o:p></p><p class=MsoNormal>Which is the rtems shell code failing to link. If we add the /c/rtems-4.9/powerpc-rtems4.9/5200/lib/libnfs.a /c/rtems-4.9/powerpc-rtems4.9/5200/lib/nfs.rel to the end of the build line, then everything succeeds.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>To re-iterate, to build the command line functions you need to directly include the nfs .a and .rel files, you DO NOT need to use -lnfs.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>---- The question ----<o:p></o:p></p><p class=MsoNormal>So the first and most obvious question is, why is this not linking, even when i explicitly give the library files? My thoughts on this are, perhaps the files do not include the definitions for the functions i am trying to use. But I need them to link the functions for the RTEMS OS itself?<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal style='text-autospace:none'><b><span style='font-size:10.0pt;font-family:"Arial","sans-serif";color:#18376A;mso-fareast-language:JA'>Ben Dart</span></b><span style='font-size:10.0pt;font-family:"Times New Roman","serif";mso-fareast-language:JA'><o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;mso-fareast-language:JA'><o:p> </o:p></span></p></div></body></html>