home *** CD-ROM | disk | FTP | other *** search
/ HaCKeRz KrOnIcKLeZ 3 / HaCKeRz_KrOnIcKLeZ.iso / scriptz / compiling.faq < prev    next >
Text File  |  1996-04-23  |  19KB  |  459 lines

  1. EGGDROP AND TCL COMPILING ERRORS AND RESOLUTION FAQ
  2. (in other words, maybe this FAQ will help you get eggdrop compiled).
  3. by Chad Wagner <cmwagner@sodre.net> and contributors
  4. Last revised: July 28, 1996
  5.  
  6.  
  7. A. EGGDROP
  8.  1. UNDEFINED REFERENCES IN NET.O  (SunOS)
  9.  
  10.    Undefined                    first referenced
  11.     symbol                          in file
  12.    socket                              net.o
  13.    gethostbyname                       net.o
  14.    accept                              net.o
  15.    bind                                net.o
  16.    setsockopt                          net.o
  17.    gethostbyaddr                       net.o
  18.    getsockname                         net.o
  19.    gethostname                         net.o
  20.    listen                              net.o
  21.    connect                             net.o
  22.    ld: fatal: Symbol referencing errors. No output written to eggdrop
  23.  
  24. This seems to be caused by a few libraries not being detected by the
  25. auto-configure program, it is relatively easy to fix.  Edit your Makefile,
  26. note that yours may be slightly different than this one when it comes to
  27. the tcl library, but here is the way it probably is:
  28.  
  29. GMAKE = ${MAKE} 'CC=gcc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl.a'\
  30.         'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS= -L/usr/local/lib -ltcl -lm'\
  31.         'TCLLIB=${TCLLIB}' 'RANLIB=:' 'STRIP='
  32.  
  33. And here is what you need to change:
  34.  
  35. GMAKE = ${MAKE} 'CC=gcc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl.a'\
  36.         'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS=-lsocket -ldl -lnsl -L/usr/local/lib -ltcl -lm'\
  37.         'TCLLIB=${TCLLIB}' 'RANLIB=:' 'STRIP='
  38.  
  39. You are adding in three libraries to be linked in, socket, dl, and nsl.  This
  40. will resolve the net.o errors.
  41.  
  42.  
  43.  2. COMPILE STOPS AT THE LAST MINUTE WITH "LD FATAL SIGNAL 11"!  (Linux)
  44.  
  45. This seems to be caused by a non-ELF Tcl library binary, and the compiler
  46. doesn't seem to like it.  The first thing you want to do is download and
  47. compile tcl yourself.  And then follow this set of commands to help you
  48. reconfigure eggdrop using the newly compiled Tcl library (all of this
  49. should be done from your home directory):
  50.  
  51. cd
  52. mkdir lib
  53. mkdir include
  54. find . -name libtcl*
  55.  
  56. The output from the find command should give you the location of the library,
  57. take the output of that and do the next command with the output of find 
  58. replacing $$find$$:
  59.  
  60. mv $$find$$ lib/libtcl.a
  61.  
  62. Now we continue with another find to help us locate tcl.h:
  63.  
  64. find . -name tcl.h
  65.  
  66. The output from the find command should give you the location of the header
  67. file, take the output of that and do the next command with the output of
  68. find replacing $$find$$:
  69.  
  70. mv $$find$$ include
  71.  
  72. Hopefully you know what shell you are using and can pick out which commands
  73. to use, if the first two setenv commands give command not found then use
  74. the next two, if not then don't use the next two.  First set are for csh/tcsh
  75. users, following set is for bash/ksh users.
  76.  
  77. csh/tcsh:
  78. setenv TCLLIB '$HOME/lib'
  79. setenv TCLINC '$HOME/include'
  80.  
  81. bash/ksh:
  82. export TCLLIB='$HOME/lib'
  83. export TCLINC='$HOME/include'
  84.  
  85. And then finally run configure again for eggdrop and then make, and hopefully
  86. it will work.
  87.  
  88.  
  89.  3. LD: -ltcl7.4: EXPECTED LIBX.SO(.MAJOR.MINOR.XXX)  (various)
  90.  
  91.    ld: -ltcl7.4: expected libx.so(.major.minor.xxx)
  92.    collect2: ld returned 4 exit status
  93.    *** Error code 1
  94.    make: Fatal error: Command failed for target `eggdrop'
  95.  
  96.  
  97. On some Unix boxes this seems to be caused by the linker, it is expecting
  98. a specific filename format and when it doesn't live up to it's expectations
  99. it usually barfs.  I always see this caused by when the library for Tcl is
  100. called libtcl7.4.a or libtcl7.5.a, rename it to simply libtcl.a if you
  101. installed Tcl yourself, if you didn't and your using the Tcl that the
  102. system installed then do this:
  103.  
  104. View your Makefile, look for the line (should be close to the top) that says
  105.  
  106. XREQ = /usr/local/lib/libtcl7.4.a
  107.  
  108. And remember that FULL pathname.  Go to your home directory, and do the
  109. following:
  110.  
  111. mkdir lib
  112. cd lib
  113. ln -s $$xreq$$ libtcl.a
  114.  
  115. Replace $$xreq$$ with the full pathname from the XREQ line from the Makefile.
  116.  
  117. And finally the next thing you want to do depending on what shell your
  118. using is: (try the first one, if it gives bad command then use the second)
  119.  
  120. csh/tcsh:
  121. setenv TCLLIB '$HOME/lib'
  122.  
  123. bash/ksh:
  124. export TCLLIB='$HOME/lib'
  125.  
  126. Did I say finally?  Heh, finally run configure and then make again.
  127.  
  128.  
  129.  4. 'TCL_DONT_WAIT' UNDECLARED IN MAIN.C  (various)
  130.  
  131.    main.c: In function `main':main.c:864: `TCL_DONT_WAIT' undeclared (first use this function)
  132.    main.c:864: (Each undeclared identifier is reported only once
  133.    main.c:864: for each function it appears in.)
  134.    make[1]: *** [main.o] Error 1
  135.  
  136.  
  137. This seems to be caused by a beta release of Tcl 7.5 on eggdrop 1.0a and
  138. later bots, the solution is relatively simple.  The solution would be to
  139. edit your config.h file and change the following line:
  140.  
  141. /* #undef MODERN_TCL */
  142.  
  143. to
  144.  
  145. #undef MODERN_TCL
  146.  
  147.  
  148.  5. '_Tcl_DoOneEvent' UNDEFINED SYMBOL  (various)
  149.  
  150.    gcc -s -o eggdrop chan.o chanprog.o chanset.o cmds.o dcc.o dccutil.o filedb.o fileq.o files.o gotdcc.o hash.o main.o match.o mem.o misc.o mode.o msgcmds.o msgnotice.o net.o tandcmd.o tandem.o tcl.o tclhash.o userrec.o users.o -ldl -L/usr/local/lib -ltc
  151. l -lm
  152.    collect2: ld returned 2 exit status
  153.    ld: Undefined symbol
  154.       _Tcl_DoOneEvent
  155.    *** Error code 1
  156.    make: Fatal error: Command failed for target `eggdrop'
  157.  
  158.  
  159. This is actually the same problem as #4, again.  Only difference is
  160. TCL_DONT_WAIT seems to be defined by Tcl_DoOneEvent function doesn't exist.
  161. The solution would be to edit your config.h file and change the following
  162. line:
  163.  
  164. /* #undef MODERN_TCL */
  165.  
  166. to
  167.  
  168. #undef MODERN_TCL
  169.  
  170.  6. STRIP TERMINATED WITH SIGNAL 6  (various)
  171.  
  172.    collect2: strip terminated with signal 6 [IOT/Abort trap]
  173.    *** Exit 1
  174.    Stop.
  175.    *** Exit 1
  176.    Stop.
  177.  
  178. I don't really know what the hell is causing this, but I find that if you
  179. don't strip the binary you cut out the problem (obviously), edit your
  180. Makefile and change this line from:
  181.  
  182. GMAKE = ${MAKE} 'CC=gcc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl.a'\
  183.         'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS= -L/usr/local/lib -ltcl -lm' \
  184.         'TCLLIB=${TCLLIB}' 'RANLIB=ranlib' 'STRIP=-s'
  185.  
  186. To this line below:  (your lines may differ, but what you are doing is
  187. changing 'STRIP=-s' to 'STRIP=')
  188.  
  189. GMAKE = ${MAKE} 'CC=gcc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl.a'\
  190.         'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS= -L/usr/local/lib -ltcl -lm' \
  191.         'TCLLIB=${TCLLIB}' 'RANLIB=ranlib' 'STRIP='
  192.  
  193.  7. 'DIR' UNDECLARED (AND A WHOLE BUNCH OF OTHERS)   (AIX 4)
  194.  
  195.    gcc -c -O2 -fno-strength-reduce -I.. -DHAVE_CONFIG_H  filedb.c
  196.    filedb.c: In function `filedb_update':
  197.    filedb.c:209: `DIR' undeclared (first use this function)
  198.    filedb.c:209: (Each undeclared identifier is reported only once
  199.    filedb.c:209: for each function it appears in.)
  200.    filedb.c:209: `dir' undeclared (first use this function)
  201.    filedb.c:209: parse error before `*'
  202.    filedb.c:217: warning: assignment makes pointer from integer without a cast
  203.    filedb.c:218: `name' undeclared (first use this function)
  204.    filedb.c:218: dereferencing pointer to incomplete type
  205.    filedb.c:220: dereferencing pointer to incomplete type
  206.    filedb.c:220: dereferencing pointer to incomplete type
  207.    filedb.c:224: dereferencing pointer to incomplete type
  208.    filedb.c:224: dereferencing pointer to incomplete type
  209.    filedb.c:225: dereferencing pointer to incomplete type
  210.    filedb.c:230: `s' undeclared (first use this function)
  211.    filedb.c:231: `st' undeclared (first use this function)
  212.    filedb.c:232: `fdb' undeclared (first use this function)
  213.    filedb.c:232: `where' undeclared (first use this function)
  214.    filedb.c:237: `fdb1' undeclared (first use this function)
  215.    filedb.c:253: warning: assignment makes pointer from integer without a cast
  216.    make: The error code from the last command is 1.
  217.  
  218. This seems like one of the components of configure was broken, because what
  219. apparently happened was it didn't detect that this particular system had
  220. dirent.h and sys/dir.h, edit your config.h and change the following two
  221. lines (these lines are not right next to each other, but they are close):
  222.  
  223. /* Define if you have the <dirent.h> header file.  */
  224. /* #undef HAVE_DIRENT_H */
  225.  
  226. /* Define if you have the <sys/dir.h> header file.  */
  227. /* #undef HAVE_SYS_DIR_H */
  228.  
  229. to
  230.  
  231. /* Define if you have the <dirent.h> header file.  */
  232. #define HAVE_DIRENT_H 1
  233.  
  234. /* Define if you have the <sys/dir.h> header file.  */
  235. #define HAVE_SYS_DIR_H 1
  236.  
  237.  8. 'FD_SET' UNDECLARED (AND A WHOLE BUNCH OF OTHERS)   (AIX 4)
  238.  
  239.    gcc -c -O2 -fno-strength-reduce -I.. -DHAVE_CONFIG_H -DHAVE_DIRENT_H -DHAVE_SYS_DIR_H net.c
  240.    net.c: In function `sockread':
  241.    net.c:390: `fd_set' undeclared (first use this function)
  242.    net.c:390: (Each undeclared identifier is reported only once
  243.    net.c:390: for each function it appears in.)
  244.    net.c:390: parse error before `fd'
  245.    net.c:396: `fd' undeclared (first use this function)
  246.    make: The error code from the last command is 1.
  247.  
  248. Again, this seems that one of configure's components (sed, awk, or something
  249. along those lines) was broken, and it failed to detect that this system needed
  250. sys/select.h, edit your config.h and change the following line:
  251.  
  252. /* Define if you have the <sys/select.h> header file.  */
  253. /* #undef HAVE_SYS_SELECT_H */
  254.  
  255. to:
  256.  
  257. /* Define if you have the <sys/select.h> header file.  */
  258. #define HAVE_SYS_SELECT_H 1
  259.  
  260. (I suppose they thought a minor error would deter anyone from continuing
  261. onward, but I am not just anyone, I am a blockhead... <grin>)
  262.  
  263.  9. UNRESOLVED OR UNDEFINED SYMBOLS: ldclose, ldopen, ldnshread  (AIX 3)
  264.  
  265.    cc -s -o eggdrop chan.o chanprog.o chanset.o cmds.o dcc.o dccutil.o filedb.o fileq.o files.o gotdcc.o hash.o main.o match.o mem.o misc.o mode.o msgcmds.o msgnotice.o net.o tandcmd.o tandem.o tcl.o tclhash.o userrec.o users.o -L/home2/f/foster/lib -ltcl
  266. 7.5 -lm
  267.    0706-317 ERROR: Unresolved or undefined symbols detected:
  268.                     Symbols in error (followed by references) are
  269.                     dumped to the load map.
  270.                     The -bloadmap:<filename> option will create a load map.
  271.    .ldclose
  272.    .ldopen
  273.    .ldnshread
  274.    make: 1254-004 The error code from the last command is 8.
  275.  
  276. Apparently what is happening is a library called ld is required, and either
  277. configure doesn't know it is needed or it simple can't find it, or maybe
  278. this is a unique case, solution was to have ld linked in with the final
  279. binary.
  280.  
  281. Edit your Makefile and find the line that looks something like this:
  282.  
  283. GMAKE = ${MAKE} 'CC=cc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl7.5.a'\
  284.         'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS= -L/home2/f/foster/lib -ltcl7.5 -lm'\
  285.         'TCLLIB=${TCLLIB}' 'RANLIB=ranlib' 'STRIP=-s'
  286.  
  287. And add in -lld into the XLIBS assignment, like this...
  288.  
  289. GMAKE = ${MAKE} 'CC=cc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl7.5.a'\
  290.         'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS=-lld -L/home2/f/foster/lib -ltcl7.5 -lm'\
  291.         'TCLLIB=${TCLLIB}' 'RANLIB=ranlib' 'STRIP=-s'
  292.  
  293.  10. UNSATISIFED SYMBOLS 'shl_findsym' and 'shl_load'  (HP-UX 9)
  294.  
  295.    gcc -s -o eggdrop chan.o chanprog.o chanset.o cmds.o dcc.o dccutil.o filedb.o fileq.o files.o gotdcc.o hash.o main.o match.o mem.o misc.o mode.o msgcmds.o msgnotice.o net.o tandcmd.o tandem.o tcl.o tclhash.o userrec.o users.o -L/home/hltran/tcl/lib -lt
  296. cl7.5 -lm
  297.    /bin/ld: Unsatisfied symbols:
  298.       shl_findsym (code)
  299.       shl_load (code)
  300.    collect2: ld returned 1 exit status
  301.    *** Error code 1
  302.    Stop.
  303.  
  304. I forwarded this one to Robey and he said that Tcl 7.5 the dl library, and that
  305. apparently configure couldn't detect that this was required in this case.  So
  306. try this fix, and if it works, great, if not then use Tcl 7.4, I hear this
  307. works.  :)
  308.  
  309. GMAKE = ${MAKE} 'CC=gcc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl7.5.a'\
  310.         'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS= -L/usr/local/lib -ltcl7.5 -lm'\
  311.         'TCLLIB=${TCLLIB}' 'RANLIB=:' 'STRIP='
  312.  
  313. And here is what you need to change:
  314.  
  315. GMAKE = ${MAKE} 'CC=gcc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl7.5.a'\
  316.         'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS=-ldl -L/usr/local/lib -ltcl7.5 -lm'\
  317.         'TCLLIB=${TCLLIB}' 'RANLIB=:' 'STRIP='
  318.  
  319. Basically what you are doing is adding in -ldl to the XLIBS declaration,
  320. essentially at link time you are tell it to also link in the dl library which
  321. apparently resolves this problem.
  322.  
  323.  
  324.  11. R_OK/X_OK UNDECLARE, IMPLICIT DECLARATION OF 'access' (Linux 1.2.13)
  325.  
  326.    /usr/include/linux/types.h:20: warning: useless keyword or type name in empty declaration
  327.    /usr/include/linux/types.h:20: warning: empty declaration
  328.    filedb.c: In function `filedb_open':
  329.    filedb.c:285: warning: implicit declaration of function `access'
  330.    filedb.c:285: `R_OK' undeclared (first use this function)
  331.    filedb.c:285: (Each undeclared identifier is reported only once
  332.    filedb.c:285: for each function it appears in.)
  333.    filedb.c:285: `X_OK' undeclared (first use this function)
  334.    make[1]: *** [filedb.o] Error 1
  335.  
  336. Apparently configure didn't find unistd.h, this should be able to fix the
  337. problem, edit your config.h and change the following line:
  338.  
  339. /* Define if you have the <unistd.h> header file.  */
  340. /* #undef HAVE_UNISTD_H */
  341.  
  342. to
  343.  
  344. /* Define if you have the <unistd.h> header file.  */
  345. #define HAVE_UNISTD_H 1
  346.  
  347.  
  348. B. TCL
  349.  
  350.  1. REDECLARATION IN COMPAT/UNISTD.H   (Tcl 7.4/AIX 4)
  351.  
  352.    cc -c -O -I. -I. -DHAVE_________=1 -DSTDC_HEADERS=1 -DNO_UNION_WAIT=1 -DNEED_MATHERR=1 -Dvfork=fork        -DTCL_LIBRARY=\"/usr/local/lib/tcl7.4\" regexp.c
  353.    "compat/unistd.h", line 42.12: 1506-343 (S) Redeclaration of execl differs from previous declaration on line 121 of "/usr/include/unistd.h".
  354.    "compat/unistd.h", line 42.12: 1506-378 (I) Prototype for function execl cannot contain "..." when mixed with a nonprototype declaration.
  355.    "compat/unistd.h", line 43.12: 1506-343 (S) Redeclaration of execle differs from previous declaration on line 123 of "/usr/include/unistd.h".
  356.    "compat/unistd.h", line 43.12: 1506-378 (I) Prototype for function execle cannot contain "..." when mixed with a nonprototype declaration.
  357.    "compat/unistd.h", line 44.12: 1506-343 (S) Redeclaration of execlp differs from previous declaration on line 125 of "/usr/include/unistd.h".
  358.    "compat/unistd.h", line 44.12: 1506-378 (I) Prototype for function execlp cannot contain "..." when mixed with a nonprototype declaration.
  359.    make: The error code from the last command is 1.
  360.  
  361. Seems that configure had a brain fart...  Would you believe this was the same
  362. system as in A.6 and A.7, heh, it was.  Apparently it thought this system
  363. didn't have unistd.h, and was using it's compatible header, solution was to
  364. edit Makefile and change this line:
  365.  
  366. AC_FLAGS = -DHAVE_________=1 -DSTDC_HEADERS=1 -DNO_UNION_WAIT=1 -DNEED_MATHERR=1 -Dvfork=fork
  367.  
  368. to the following:
  369.  
  370. AC_FLAGS = -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1 -DNO_UNION_WAIT=1 -DNEED_MATHERR=1 -Dvfork=fork
  371.  
  372.  
  373.  2. CONFLICTING TYPES FOR 'waitpid'   (Tcl 7.5/SunOS 5.4)
  374.  
  375.    cc -c -O  -I./../generic -I. -DNO_STRERROR=1 -DNO_GETWD=1 -DNO_WAIT3=1 -DNO_UNAME=1 -DNO_DIRENT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_SYS_TIME_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_TIMEZONE_VAR=1 -DUSE_DIRENT2_H=1 -DNO_UNION_WAIT=1 -DNEED_MATHERR=1 -Dvfork=fork -DN
  376. O_GETTOD=1 -DGETTOD_NOT_DECLARED=1       -DTCL_SHLIB_EXT=\".so\"
  377.    ./../compat/waitpid.c
  378.    ./../compat/waitpid.c:69: conflicting types for `waitpid'
  379.    /usr/include/sys/wait.h:80: previous declaration of `waitpid'
  380.    make: *** [waitpid.o] Error 1
  381.  
  382. Configure apparently couldn't figure this one out, probably because the system
  383. it was configured on sucks badly.  Change the following line in Makefile:
  384.  
  385. COMPAT_OBJS =          getcwd.o opendir.o strstr.o strtol.o tmpnam.o waitpid.o strstr.o strtoul.o strtod.o strncasecmp.o
  386.  
  387. To the following
  388.  
  389. COMPAT_OBJS =          getcwd.o opendir.o strstr.o strtol.o tmpnam.o strstr.o strtoul.o strtod.o strncasecmp.o
  390.  
  391. We are deleting the waitpid.o object file.  The problem was that configure
  392. didn't detect that waitpid() wasn't necessary, so it caused a compatible
  393. waitpid() function to be compiled.
  394.  
  395.  
  396.  3. UNDEFINED SYMBOLS IN tclUnixChan.o -- AND MANY OTHERS   (Tcl 7.5/SunOS 5.4)
  397.  
  398.    gcc  tclAppInit.o -L/export/home/rewt/tcl7.5/unix -ltcl7.5 -ldl  -lm -lc \
  399.             -o tclsh
  400.    Undefined                       first referenced
  401.     symbol                             in file
  402.    socket                              /export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o)
  403.    getpeername                         /export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o)
  404.    recv                                /export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o)
  405.    gethostbyname                       /export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o)
  406.    accept                              /export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o)
  407.    send                                /export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o)
  408.    bind                                /export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o)
  409.    setsockopt                          /export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o)
  410.    getwd                               /export/home/rewt/tcl7.5/unix/libtcl7.5.a(getcwd.o)
  411.    getservbyname                       /export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclIOSock.o)
  412.    gethostbyaddr                       /export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o)
  413.    getsockopt                          /export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclIOSock.o)
  414.    inet_addr                           /export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o)
  415.    inet_ntoa                           /export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o)
  416.    getsockname                         /export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o)
  417.    listen                              /export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o)
  418.    connect                             /export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o)
  419.    ld: fatal: Symbol referencing errors. No output written to tclsh
  420.    make: *** [tclsh] Error 1
  421.  
  422. Configure couldn't find or detect that nsl and socket libraries were required,
  423. so we have to force it to use them.  The solution is to edit Makefile and
  424. change the following line:
  425.  
  426. LIBS = -ldl
  427.  
  428. To the following:
  429.  
  430. LIBS = -ldl -lnsl -lsocket
  431.  
  432.  
  433.  4. UNDEFINED SYMBOL 'getwd' IN getcwd.o   (Tcl 7.5/SunOS 5.4)
  434.  
  435.    gcc  tclAppInit.o -L/export/home/rewt/tcl7.5/unix -ltcl7.5 -ldl -lnsl -lsocket -lm -lc \
  436.             -o tclsh
  437.    Undefined                       first referenced
  438.     symbol                             in file
  439.    getwd                               /export/home/rewt/tcl7.5/unix/libtcl7.5.a(getcwd.o)
  440.    ld: fatal: Symbol referencing errors. No output written to tclsh
  441.    make: *** [tclsh] Error 1
  442.  
  443.  
  444. Configure apparently couldn't figure this one out, probably because the system
  445. it was configured on sucks badly.  Change the following line in Makefile:
  446.  
  447. COMPAT_OBJS =          getcwd.o opendir.o strstr.o strtol.o tmpnam.o strstr.o strtoul.o strtod.o strncasecmp.o
  448.  
  449. To the following
  450.  
  451. COMPAT_OBJS =          opendir.o strstr.o strtol.o tmpnam.o strstr.o strtoul.o strtod.o strncasecmp.o
  452.  
  453. We are deleting the getcwd.o object file.  The problem was that configure
  454. didn't detect that getcwd() wasn't necessary, so it caused a compatible
  455. getcwd() function to be compiled.
  456.  
  457.  
  458.  
  459.