ToolRunner.cpp:396: error: `SHLIBEXT' undeclared (firstuse this function)

Hi John,

Please see below, too

From: John Criswell <criswell@cs.uiuc.edu>
Date: Tue, 27 Jul 2004 14:57:02 -0500

Henrik Bach wrote:

Hi,

Please see below.

I get this error:
------------------
ToolRunner.cpp:396: error: `SHLIBEXT' undeclared (first use this function)
ToolRunner.cpp:396: error: (Each undeclared identifier is reported only once
  for each function it appears in.)
------------------

And the config.log shows that configure has detected that ld on my platform (Interix) doesn't support shared libraries:
------------------
configure:6176: checking if gcc supports -c -o file.o
configure:6204: gcc -c -g -O2 -o out/conftest2.o conftest.c >&5
configure:6208: $? = 0
configure:6225: result: yes
configure:6251: checking whether the gcc linker (/opt/gcc.3.3/i586-pc-interix3/bin/ld) supports shared libraries
configure:7045: result: no
configure:7116: checking how to hardcode library paths into programs
configure:7141: result: immediate
configure:7155: checking whether stripping libraries is possible
configure:7160: result: yes
configure:7182: checking dynamic linker characteristics
configure:7693: result: no
configure:8419: checking if libtool supports shared libraries
configure:8421: result: no
configure:8424: checking whether to build shared libraries
configure:8473: result: no
configure:8476: checking whether to build static libraries
configure:8480: result: yes
configure:8571: creating mklib
configure:9115: checking for ld used by g++
configure:9182: result: /opt/gcc.3.3/i586-pc-interix3/bin/ld
configure:9191: checking if the linker (/opt/gcc.3.3/i586-pc-interix3/bin/ld) is GNU ld
configure:9206: result: yes
configure:9257: checking whether the g++ linker (/opt/gcc.3.3/i586-pc-interix3/bin/ld) supports shared libraries
configure:10052: result: no
configure:10070: g++ -c -g -O2 conftest.cc >&5
configure:10073: $? = 0
------------------

Is there any hack here to move further with my port of llvm to Interix?

I've looked at the recent libtool documentation, and they don't seem to have any information on whether they support Interfix.

One hack for LLVM is to modify the rules for dynamic linking in Makefile.rules. You could change the Makefile rules to perform dynamic linking directly instead of using libtool. You can change the rules to call gcc or ld with whatever options you need to use on Interix.

Another option is to test libtool and see if it works on Interix. This would be a more correct but more time-consuming fix.

There is a ported libtool for Interix for download and installation.

What's the procedure after installation of the ported libtool then?

Thanks in advance

/Henrik

Henrik Bach wrote:

There is a ported libtool for Interix for download and installation.

What's the procedure after installation of the ported libtool then?

Thanks in advance

/Henrik

If you just want to use the libtool program installed for Interix, then all you need to do is to change the LIBTOOL variable in Makefile.rules to point to your locally installed libtool program.

If you want to add support in your llvm source tree to configure for Interix, that would be a little more difficult. I believe you would want to use the libtoolize program to enable libtool support. I think you would do something like:

cd llvm/autoconf
libtoolize -c

That, in turn, should copy over some files, like ltmain.sh and maybe a libtool.m4, into the autoconf directory. Then, the libtool.m4 file would need to be merged with acinclude.m4. The libtoolize program should be in your libtool distribution.

My memory is a little fuzzy on this; it's been awhile since I've integrated libtool.

-- John T.