1 |
Compiling FAQ |
2 |
------------------------------------------------------------------------ |
3 |
|
4 |
Woohoo, you're among the few people who actually read the docs, applause. |
5 |
|
6 |
|
7 |
EGGDROP AND TCL COMPILING ERRORS AND RESOLUTION FAQ |
8 |
(in other words, maybe this FAQ will help you get eggdrop compiled). by |
9 |
various contributors. If you think something should be added, please send |
10 |
an E-Mail to eggdev@eggheads.org or check http://www.eggheads.org/bugzilla |
11 |
if your issue is already covered there. |
12 |
Last revised: 20 August 2000 |
13 |
|
14 |
Eggdrop related Questions |
15 |
|
16 |
1. UNDEFINED REFERENCES IN NET.O (Sun OS) |
17 |
2. COMPILE STOPS AT THE LAST MINUTE WITH "LD FATAL SIGNAL 11"! |
18 |
(Linux) |
19 |
3. LD: -ltcl7.4: EXPECTED LIBX.SO(.MAJOR.MINOR.XXX) (various) |
20 |
4. STRIP TERMINATED WITH SIGNAL 6 (various) |
21 |
5. 'DIR' UNDECLARED (AND A WHOLE BUNCH OF OTHERS) (AIX 4) |
22 |
6. 'FD_SET' UNDECLARED (AND A WHOLE BUNCH OF OTHERS) (AIX 4) |
23 |
7. UNRESOLVED OR UNDEFINED SYMBOLS: ldclose, ldopen, ldnshread |
24 |
(AIX 3) |
25 |
8. UNSATISFIED SYMBOLS 'shl_findsym' and 'shl_load' (HP-UX 9) |
26 |
9. Bot doesn't compile on Ultrix |
27 |
10. Bot crashes at startup with msg "net.c/708" for example |
28 |
11. I get lot's of warnings |
29 |
|
30 |
Tcl related questions |
31 |
|
32 |
1. REDECLARATION IN COMPAT/UNISTD.H (Tcl 7.4/AIX 4) |
33 |
2. CONFLICTING TYPES FOR 'waitpid' (Tcl 7.5/SunOS 5.4) |
34 |
3. UNDEFINED SYMBOLS IN tclUnixChan.o -- AND MANY OTHERS (Tcl |
35 |
7.5/SunOS 5.4) |
36 |
4. UNDEFINED SYMBOL 'getwd' IN getcwd.o (Tcl 7.5/SunOS 5.4) |
37 |
5. There's no TCL installed on your shell |
38 |
|
39 |
------------------------------------------------------------------------ |
40 |
|
41 |
A. EGGDROP |
42 |
1. UNDEFINED REFERENCES IN NET.O (Sun OS) |
43 |
|
44 |
|
45 |
Undefined first |
46 |
symbol referenced |
47 |
in file |
48 |
socket net.o |
49 |
gethostbyname net.o |
50 |
accept net.o |
51 |
bind net.o |
52 |
setsockopt net.o |
53 |
gethostbyaddr net.o |
54 |
getsockname net.o |
55 |
gethostname net.o |
56 |
listen net.o |
57 |
connect net.o |
58 |
ld: fatal: Symbol referencing errors. No output written to eggdrop |
59 |
|
60 |
This seems to be caused by a few libraries not being detected by the |
61 |
auto-configure program, it is relatively easy to fix. Edit your |
62 |
Makefile, |
63 |
note that yours may be slightly different than this one when it comes |
64 |
to |
65 |
the tcl library, but here is the way it probably is: |
66 |
|
67 |
GMAKE = ${MAKE} 'CC=gcc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl.a'\ |
68 |
'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS= -L/usr/local/lib |
69 |
-ltcl -lm'\ |
70 |
'TCLLIB=${TCLLIB}' 'RANLIB=:' 'STRIP=' |
71 |
|
72 |
And here is what you need to change: |
73 |
|
74 |
GMAKE = ${MAKE} 'CC=gcc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl.a'\ |
75 |
'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS=-lsocket -ldl -lnsl |
76 |
-L/usr/local/lib -ltcl -lm'\ |
77 |
'TCLLIB=${TCLLIB}' 'RANLIB=:' 'STRIP=' |
78 |
|
79 |
You are adding in three libraries to be linked in, socket, dl, and |
80 |
nsl. This |
81 |
will resolve the net.o errors. |
82 |
|
83 |
2. COMPILE STOPS AT THE LAST MINUTE WITH "LD FATAL SIGNAL 11"! (Linux) |
84 |
|
85 |
This seems to be caused by a non-ELF Tcl library binary, and the |
86 |
compiler doesn't seem to like it. The first thing you want to do is |
87 |
download and compile tcl yourself. And then follow this set of |
88 |
commands to help you reconfigure eggdrop using the newly compiled Tcl |
89 |
library (all of this should be done from your home directory): |
90 |
|
91 |
cd |
92 |
mkdir lib |
93 |
mkdir include |
94 |
find . -name libtcl* |
95 |
|
96 |
The output from the find command should give you the location of the |
97 |
library, take the output of that and do the next command with the |
98 |
output of find replacing $$find$$: |
99 |
|
100 |
mv $$find$$ lib/libtcl.a |
101 |
|
102 |
Now we continue with another find to help us locate tcl.h: |
103 |
|
104 |
find . -name tcl.h |
105 |
|
106 |
The output from the find command should give you the location of the |
107 |
header file, take the output of that and do the next command with the |
108 |
output of find replacing $$find$$: |
109 |
|
110 |
mv $$find$$ include |
111 |
|
112 |
Hopefully you know what shell you are using and can pick out which |
113 |
commands to use, if the first two setenv commands give command not |
114 |
found then use the next two, if not then don't use the next two. |
115 |
First set are for csh/tcsh users, following set is for bash/ksh users. |
116 |
|
117 |
csh/tcsh: |
118 |
setenv TCLLIB '$HOME/lib' |
119 |
setenv TCLINC '$HOME/include' |
120 |
|
121 |
bash/ksh: |
122 |
export TCLLIB='$HOME/lib' |
123 |
export TCLINC='$HOME/include' |
124 |
|
125 |
And then finally run configure again for eggdrop and then make, and |
126 |
hopefully it will work. |
127 |
|
128 |
3. LD: -ltcl7.4: EXPECTED LIBX.SO(.MAJOR.MINOR.XXX) (various) |
129 |
|
130 |
ld: -ltcl7.4: expected libx.so(.major.minor.xxx) |
131 |
collect2: ld returned 4 exit status |
132 |
*** Error code 1 |
133 |
make: Fatal error: Command failed for target `eggdrop' |
134 |
|
135 |
|
136 |
On some Unix boxes this seems to be caused by the linker, it is |
137 |
expecting a specific filename format and when it doesn't live up to |
138 |
it's expectations it usually barfs. I always see this caused by when |
139 |
the library for Tcl is called libtcl7.4.a or libtcl7.5.a, rename it to |
140 |
simply libtcl.a if you installed Tcl yourself, if you didn't and your |
141 |
using the Tcl that the system installed then do this: |
142 |
|
143 |
View your Makefile, look for the line (should be close to the top) |
144 |
that says |
145 |
|
146 |
XREQ = /usr/local/lib/libtcl7.4.a |
147 |
|
148 |
And remember that FULL pathname. Go to your home directory, and do |
149 |
the following: |
150 |
|
151 |
mkdir lib |
152 |
cd lib |
153 |
ln -s $$xreq$$ libtcl.a |
154 |
|
155 |
Replace $$xreq$$ with the full pathname from the XREQ line from the |
156 |
Makefile. |
157 |
|
158 |
And finally the next thing you want to do depending on what shell your |
159 |
using is: (try the first one, if it gives bad command then use the |
160 |
second) |
161 |
|
162 |
csh/tcsh: |
163 |
setenv TCLLIB '$HOME/lib' |
164 |
|
165 |
bash/ksh: |
166 |
export TCLLIB='$HOME/lib' |
167 |
|
168 |
Did I say finally? Heh, finally run configure and then make again. |
169 |
|
170 |
4. 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 |
179 |
you |
180 |
don't strip the binary you cut out the problem (obviously), edit your |
181 |
Makefile and change this line from: |
182 |
|
183 |
GMAKE = ${MAKE} 'CC=gcc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl.a'\ |
184 |
'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS= -L/usr/local/lib |
185 |
-ltcl -lm' \ |
186 |
'TCLLIB=${TCLLIB}' 'RANLIB=ranlib' 'STRIP=-s' |
187 |
|
188 |
To this line below: (your lines may differ, but what you are doing is |
189 |
|
190 |
changing 'STRIP=-s' to 'STRIP=') |
191 |
|
192 |
GMAKE = ${MAKE} 'CC=gcc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl.a'\ |
193 |
'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS= -L/usr/local/lib |
194 |
-ltcl -lm' \ |
195 |
'TCLLIB=${TCLLIB}' 'RANLIB=ranlib' 'STRIP=' |
196 |
|
197 |
5. 'DIR' UNDECLARED (AND A WHOLE BUNCH OF OTHERS) (AIX 4) |
198 |
|
199 |
gcc -c -O2 -fno-strength-reduce -I.. -DHAVE_CONFIG_H filedb.c |
200 |
filedb.c: In function `filedb_update': |
201 |
filedb.c:209: `DIR' undeclared (first use this function) |
202 |
filedb.c:209: (Each undeclared identifier is reported only once |
203 |
filedb.c:209: for each function it appears in.) |
204 |
filedb.c:209: `dir' undeclared (first use this function) |
205 |
filedb.c:209: parse error before `*' |
206 |
filedb.c:217: warning: assignment makes pointer from integer |
207 |
without a cast |
208 |
filedb.c:218: `name' undeclared (first use this function) |
209 |
filedb.c:218: dereferencing pointer to incomplete type |
210 |
filedb.c:220: dereferencing pointer to incomplete type |
211 |
filedb.c:220: dereferencing pointer to incomplete type |
212 |
filedb.c:224: dereferencing pointer to incomplete type |
213 |
filedb.c:224: dereferencing pointer to incomplete type |
214 |
filedb.c:225: dereferencing pointer to incomplete type |
215 |
filedb.c:230: `s' undeclared (first use this function) |
216 |
filedb.c:231: `st' undeclared (first use this function) |
217 |
filedb.c:232: `fdb' undeclared (first use this function) |
218 |
filedb.c:232: `where' undeclared (first use this function) |
219 |
filedb.c:237: `fdb1' undeclared (first use this function) |
220 |
filedb.c:253: warning: assignment makes pointer from integer |
221 |
without a cast |
222 |
make: The error code from the last command is 1. |
223 |
|
224 |
This seems like one of the components of configure was broken, because |
225 |
what apparently happened was it didn't detect that this particular |
226 |
system had dirent.h and sys/dir.h, solution was to add -DHAVE_DIRENT_H |
227 |
-DHAVE_SYS_DIR_H to the Makefile's CFLGS line... |
228 |
|
229 |
CFLGS = -DHAVE_DIRENT_H -DHAVE_SYS_DIR_H |
230 |
|
231 |
6. 'FD_SET' UNDECLARED (AND A WHOLE BUNCH OF OTHERS) (AIX 4) |
232 |
|
233 |
gcc -c -O2 -fno-strength-reduce -I.. -DHAVE_CONFIG_H |
234 |
-DHAVE_DIRENT_H -DHAVE_SYS_DIR_H net.c |
235 |
net.c: In function `sockread': |
236 |
net.c:390: `fd_set' undeclared (first use this function) |
237 |
net.c:390: (Each undeclared identifier is reported only once |
238 |
net.c:390: for each function it appears in.) |
239 |
net.c:390: parse error before `fd' |
240 |
net.c:396: `fd' undeclared (first use this function) |
241 |
make: The error code from the last command is 1. |
242 |
|
243 |
Again, this seems that one of configure's components (sed, awk, or |
244 |
something along those lines) was broken, and it failed to detect that |
245 |
this system needed sys/select.h, solution was to add |
246 |
-DHAVE_SYS_SELECT_H to the Makefile's CFLGS |
247 |
line... |
248 |
|
249 |
CFLGS = -DHAVE_DIRENT_H -DHAVE_SYS_DIR_H -DHAVE_SYS_SELECT_H |
250 |
|
251 |
(I suppose they thought a minor error would deter anyone from |
252 |
continuing onward, but I am not just anyone, I am a blockhead... |
253 |
<grin>) |
254 |
|
255 |
7. UNRESOLVED OR UNDEFINED SYMBOLS: ldclose, ldopen, ldnshread (AIX 3) |
256 |
|
257 |
cc -s -o eggdrop chan.o chanprog.o chanset.o cmds.o dcc.o dccutil.o |
258 |
filedb.o fileq.o files.o gotdcc.o hash.o main.o match.o mem.o misc.o |
259 |
mode.o msgcmds.o msgnotice.o net.o tandcmd.o tandem.o tcl.o tclhash.o |
260 |
userrec.o users.o -L/home2/f/foster/lib -ltcl7.5 -lm |
261 |
0706-317 ERROR: Unresolved or undefined symbols detected: |
262 |
Symbols in error (followed by references) are |
263 |
dumped to the load map. |
264 |
The -bloadmap:<filename> option will create a load |
265 |
map. |
266 |
.ldclose |
267 |
.ldopen |
268 |
.ldnshread |
269 |
make: 1254-004 The error code from the last command is 8. |
270 |
|
271 |
Apparently what is happening is a library called ld is required, and |
272 |
either configure doesn't know it is needed or it simple can't find it, |
273 |
or maybe this is a unique case, solution was to have ld linked in with |
274 |
the final binary. |
275 |
|
276 |
Edit your Makefile and find the line that looks something like this: |
277 |
|
278 |
GMAKE = ${MAKE} 'CC=cc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl7.5.a'\ |
279 |
'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS= |
280 |
-L/home2/f/foster/lib -ltcl7.5 -lm'\ |
281 |
'TCLLIB=${TCLLIB}' 'RANLIB=ranlib' 'STRIP=-s' |
282 |
|
283 |
And add in -lld into the XLIBS assignment, like this... |
284 |
|
285 |
GMAKE = ${MAKE} 'CC=cc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl7.5.a'\ |
286 |
'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS=-lld |
287 |
-L/home2/f/foster/lib -ltcl7.5 -lm'\ |
288 |
'TCLLIB=${TCLLIB}' 'RANLIB=ranlib' 'STRIP=-s' |
289 |
|
290 |
8. UNSATISFIED SYMBOLS 'shl_findsym' and 'shl_load' (HP-UX 9) |
291 |
|
292 |
gcc -s -o eggdrop chan.o chanprog.o chanset.o cmds.o dcc.o |
293 |
dccutil.o filedb.o fileq.o files.o gotdcc.o hash.o main.o match.o |
294 |
mem.o misc.o mode.o msgcmds.o msgnotice.o net.o tandcmd.o tandem.o |
295 |
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, |
305 |
and that |
306 |
apparently configure couldn't detect that this was required in this |
307 |
case. So |
308 |
try this fix, and if it works, great, if not then use Tcl 7.4, I hear |
309 |
this |
310 |
works. :) |
311 |
|
312 |
GMAKE = ${MAKE} 'CC=gcc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl7.5.a'\ |
313 |
|
314 |
'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS= -L/usr/local/lib |
315 |
-ltcl7.5 -lm'\ |
316 |
'TCLLIB=${TCLLIB}' 'RANLIB=:' 'STRIP=' |
317 |
|
318 |
And here is what you need to change: |
319 |
|
320 |
GMAKE = ${MAKE} 'CC=gcc' 'AWK=awk' 'OBJS=${OBJS}' 'TCLLIBFN=tcl7.5.a'\ |
321 |
|
322 |
'CFLAGS=${CFLAGS}' 'XREQ=${XREQ}' 'XLIBS=-ldl -L/usr/local/lib |
323 |
-ltcl7.5 -lm'\ |
324 |
'TCLLIB=${TCLLIB}' 'RANLIB=:' 'STRIP=' |
325 |
|
326 |
Basically what you are doing is adding in -ldl to the XLIBS |
327 |
declaration, |
328 |
essentially at link time you are tell it to also link in the dl |
329 |
library which |
330 |
apparently resolves this problem. |
331 |
|
332 |
9. Bot doesn't compile on Ultrix |
333 |
|
334 |
There are some known problems with make and Eggdrop on Ultrix systems. |
335 |
Try to use gmake instead. Additionally sh5 should be use, a simple |
336 |
'gmake SHELL=/bin/sh5' should be enough. |
337 |
|
338 |
10. Bot crashes at startup with msg "net.c/708" for example |
339 |
|
340 |
On some not IA32 systems the gcc options -O2 and -O3 cause that. We don't |
341 |
know why this happens but sometimes it helps to remove those options from |
342 |
the Makefile. Just give it a try. |
343 |
Ah well, drop us a note if you know why, so we can extend the info here. |
344 |
|
345 |
11. I get lot's of warnings |
346 |
|
347 |
Well, warnings are warning, nothing really bad. As long as the compile runs |
348 |
through, there is nothing to worry about. Generally we try to avoid |
349 |
warnings, but we do not have time to fix all of them in the code. This |
350 |
might change in the future, but at the moment you have to live with them. |
351 |
If you feel like fixing them, do so and send us a patch (as described in |
352 |
doc/patch-HOWTO). Thanks. |
353 |
|
354 |
|
355 |
|
356 |
------------------------------------------------------------------------ |
357 |
|
358 |
B. TCL |
359 |
|
360 |
1. REDECLARATION IN COMPAT/UNISTD.H (Tcl 7.4/AIX 4) |
361 |
|
362 |
cc -c -O -I. -I. -DHAVE_________=1 -DSTDC_HEADERS=1 |
363 |
-DNO_UNION_WAIT=1 -DNEED_MATHERR=1 -Dvfork=fork |
364 |
-DTCL_LIBRARY=\"/usr/local/lib/tcl7.4\" regexp.c |
365 |
"compat/unistd.h", line 42.12: 1506-343 (S) Redeclaration of execl |
366 |
differs from previous declaration on line 121 of |
367 |
"/usr/include/unistd.h". |
368 |
"compat/unistd.h", line 42.12: 1506-378 (I) Prototype for function |
369 |
execl cannot contain "..." when mixed with a nonprototype declaration. |
370 |
|
371 |
"compat/unistd.h", line 43.12: 1506-343 (S) Redeclaration of execle |
372 |
differs from previous declaration on line 123 of |
373 |
"/usr/include/unistd.h". |
374 |
"compat/unistd.h", line 43.12: 1506-378 (I) Prototype for function |
375 |
execle cannot contain "..." when mixed with a nonprototype |
376 |
declaration. |
377 |
"compat/unistd.h", line 44.12: 1506-343 (S) Redeclaration of execlp |
378 |
differs from previous declaration on line 125 of |
379 |
"/usr/include/unistd.h". |
380 |
"compat/unistd.h", line 44.12: 1506-378 (I) Prototype for function |
381 |
execlp cannot contain "..." when mixed with a nonprototype |
382 |
declaration. |
383 |
make: The error code from the last command is 1. |
384 |
|
385 |
Seems that configure had a brain fart... Would you believe this was |
386 |
the same system as in A.6 and A.7, heh, it was. Apparently it thought |
387 |
this system didn't have unistd.h, and was using it's compatible |
388 |
header, solution was to edit Makefile and change this line: |
389 |
|
390 |
AC_FLAGS = -DHAVE_________=1 -DSTDC_HEADERS=1 -DNO_UNION_WAIT=1 |
391 |
-DNEED_MATHERR=1 -Dvfork=fork |
392 |
|
393 |
to the following: |
394 |
|
395 |
AC_FLAGS = -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1 -DNO_UNION_WAIT=1 |
396 |
-DNEED_MATHERR=1 -Dvfork=fork |
397 |
|
398 |
2. CONFLICTING TYPES FOR 'waitpid' (Tcl 7.5/SunOS 5.4) |
399 |
|
400 |
cc -c -O -I./../generic -I. -DNO_STRERROR=1 -DNO_GETWD=1 |
401 |
-DNO_WAIT3=1 -DNO_UNAME=1 -DNO_DIRENT_H=1 -DHAVE_UNISTD_H=1 |
402 |
-DHAVE_SYS_TIME_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_TIMEZONE_VAR=1 |
403 |
-DUSE_DIRENT2_H=1 -DNO_UNION_WAIT=1 -DNEED_MATHERR=1 -Dvfork=fork -DN |
404 |
O_GETTOD=1 -DGETTOD_NOT_DECLARED=1 -DTCL_SHLIB_EXT=\".so\" |
405 |
./../compat/waitpid.c |
406 |
./../compat/waitpid.c:69: conflicting types for `waitpid' |
407 |
/usr/include/sys/wait.h:80: previous declaration of `waitpid' |
408 |
make: *** [waitpid.o] Error 1 |
409 |
|
410 |
Configure apparently couldn't figure this one out, probably because |
411 |
the system it was configured on sucks badly. Change the following |
412 |
line in Makefile: |
413 |
|
414 |
COMPAT_OBJS = getcwd.o opendir.o strstr.o strtol.o tmpnam.o |
415 |
waitpid.o strstr.o strtoul.o strtod.o strncasecmp.o |
416 |
|
417 |
To the following |
418 |
|
419 |
COMPAT_OBJS = getcwd.o opendir.o strstr.o strtol.o tmpnam.o |
420 |
strstr.o strtoul.o strtod.o strncasecmp.o |
421 |
|
422 |
We are deleting the waitpid.o object file. The problem was that |
423 |
configure didn't detect that waitpid() wasn't necessary, so it caused |
424 |
a compatible waitpid() function to be compiled. |
425 |
|
426 |
3. UNDEFINED SYMBOLS IN tclUnixChan.o -- AND MANY OTHERS (Tcl 7.5/SunOS |
427 |
5.4) |
428 |
|
429 |
gcc tclAppInit.o -L/export/home/rewt/tcl7.5/unix -ltcl7.5 -ldl |
430 |
-lm -lc \ |
431 |
-o tclsh |
432 |
Undefined first referenced |
433 |
symbol in file |
434 |
socket |
435 |
/export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o) |
436 |
getpeername |
437 |
/export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o) |
438 |
recv |
439 |
/export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o) |
440 |
gethostbyname |
441 |
/export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o) |
442 |
accept |
443 |
/export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o) |
444 |
send |
445 |
/export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o) |
446 |
bind |
447 |
/export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o) |
448 |
setsockopt |
449 |
/export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o) |
450 |
getwd |
451 |
/export/home/rewt/tcl7.5/unix/libtcl7.5.a(getcwd.o) |
452 |
getservbyname |
453 |
/export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclIOSock.o) |
454 |
gethostbyaddr |
455 |
/export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o) |
456 |
getsockopt |
457 |
/export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclIOSock.o) |
458 |
inet_addr |
459 |
/export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o) |
460 |
inet_ntoa |
461 |
/export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o) |
462 |
getsockname |
463 |
/export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o) |
464 |
listen |
465 |
/export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o) |
466 |
connect |
467 |
/export/home/rewt/tcl7.5/unix/libtcl7.5.a(tclUnixChan.o) |
468 |
ld: fatal: Symbol referencing errors. No output written to tclsh |
469 |
make: *** [tclsh] Error 1 |
470 |
|
471 |
Configure couldn't find or detect that nsl and socket libraries were |
472 |
required, so we have to force it to use them. The solution is to edit |
473 |
Makefile and change the following line: |
474 |
|
475 |
LIBS = -ldl |
476 |
|
477 |
To the following: |
478 |
|
479 |
LIBS = -ldl -lnsl -lsocket |
480 |
|
481 |
4. UNDEFINED SYMBOL 'getwd' IN getcwd.o (Tcl 7.5/SunOS 5.4) |
482 |
|
483 |
gcc tclAppInit.o -L/export/home/rewt/tcl7.5/unix -ltcl7.5 -ldl |
484 |
-lnsl -lsocket -lm -lc \ |
485 |
-o tclsh |
486 |
Undefined first referenced |
487 |
symbol in file |
488 |
getwd |
489 |
/export/home/rewt/tcl7.5/unix/libtcl7.5.a(getcwd.o) |
490 |
ld: fatal: Symbol referencing errors. No output written to tclsh |
491 |
make: *** [tclsh] Error 1 |
492 |
|
493 |
|
494 |
Configure apparently couldn't figure this one out, probably because |
495 |
the system it was configured on sucks badly. Change the following |
496 |
line in Makefile: |
497 |
|
498 |
COMPAT_OBJS = getcwd.o opendir.o strstr.o strtol.o tmpnam.o |
499 |
strstr.o strtoul.o strtod.o strncasecmp.o |
500 |
|
501 |
To the following |
502 |
|
503 |
COMPAT_OBJS = opendir.o strstr.o strtol.o tmpnam.o strstr.o |
504 |
strtoul.o strtod.o strncasecmp.o |
505 |
|
506 |
We are deleting the getcwd.o object file. The problem was that |
507 |
configure didn't detect that getcwd() wasn't necessary, so it caused a |
508 |
compatible getcwd() function to be compiled. |
509 |
|
510 |
5. There's no TCL installed on your shell |
511 |
|
512 |
If there's really no TCL installed on your shell, you can install it |
513 |
temporary in /tmp or your home. Get the newest version of TCL from |
514 |
ftp.eggheads.org/pub/tcl/ (anything above TCL 8.2 should be fine) and |
515 |
follow the installation steps in the README. After you've installed |
516 |
tcl, you have to make configure detect tcl. To achieve this, you have |
517 |
to set either environmental variables: |
518 |
|
519 |
export TCLLIB=/path/to/tcl/lib |
520 |
export TCLINC=/path/to/tcl/include |
521 |
|
522 |
Please note that on some unix machines export doesn't work and you |
523 |
have to use 'setenv' instead or to pass configure the full qualified |
524 |
path to tcl: |
525 |
|
526 |
./configure --with-tcllib=/path/to/libtclx.x.so |
527 |
--with-tclinc=/path/to/tcl.h |
528 |
|
529 |
------------------------------------------------------------------------ |
530 |
|
531 |
(C) 1997 Robey Pointer |
532 |
(C) 2000, 2001 Eggheads Development Team |