[colm-users] Failure to build from source (FTBFS) colm-0.14.1

Adrian Thurston thurston at colm.net
Wed May 6 04:47:30 EDT 2020


Hi Jan

Colm is invoking the compiler and linker to produce an executable. It 
generate some code, then compiles and links it against libcolm. When 
Colm is run out of the source tree it uses a static link to avoid any 
issues with link paths, since it is not running from an installed 
location.

What's the use case for --disable-static? Smaller installations?

Probably we could notice this configure flag and have Colm attempt a 
dynamic link with rpath specified. In fact I was doing this, but to 
increase compatibility with other platforms and simplify things I 
switched to a static link.

Adrian

On 2020-04-30 11:44, Jan Engelhardt wrote:
> colm-0.14.1 illegally depends on an implementation detail of libtool
> and hence fails to build. The previous version, colm-0.13.0.7,
> did not exhibit this problem.
> 
> 
> 10:26 a4:../colm/colm-0.14.1 » ./configure --disable-static
> checking for a BSD-compatible install... /usr/bin/install -c
> checking whether build environment is sane... yes
> checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
> checking for gawk... gawk
> checking whether make sets $(MAKE)... yes
> checking whether make supports nested variables... yes
> checking whether make supports nested variables... (cached) yes
> checking whether make supports the include directive... yes (GNU style)
> checking for gcc... gcc
> checking whether the C compiler works... yes
> checking for C compiler default output file name... a.out
> checking for suffix of executables...
> checking whether we are cross compiling... no
> checking for suffix of object files... o
> checking whether we are using the GNU C compiler... yes
> checking whether gcc accepts -g... yes
> checking for gcc option to accept ISO C89... none needed
> checking whether gcc understands -c and -o together... yes
> checking dependency style of gcc... gcc3
> checking how to run the C preprocessor... gcc -E
> checking for grep that handles long lines and -e... /usr/bin/grep
> checking for egrep... /usr/bin/grep -E
> checking for ANSI C header files... yes
> checking for sys/types.h... yes
> checking for sys/stat.h... yes
> checking for stdlib.h... yes
> checking for string.h... yes
> checking for memory.h... yes
> checking for strings.h... yes
> checking for inttypes.h... yes
> checking for stdint.h... yes
> checking for unistd.h... yes
> checking size of int... 4
> checking size of void *... 8
> checking size of long... 8
> checking size of unsigned long... 8
> checking size of unsigned long long... 8
> checking sys/mman.h usability... yes
> checking sys/mman.h presence... yes
> checking for sys/mman.h... yes
> checking sys/wait.h usability... yes
> checking sys/wait.h presence... yes
> checking for sys/wait.h... yes
> checking for unistd.h... (cached) yes
> checking for gcc... (cached) gcc
> checking whether we are using the GNU C compiler... (cached) yes
> checking whether gcc accepts -g... (cached) yes
> checking for gcc option to accept ISO C89... (cached) none needed
> checking whether gcc understands -c and -o together... (cached) yes
> checking dependency style of gcc... (cached) gcc3
> checking for g++... g++
> checking whether we are using the GNU C++ compiler... yes
> checking whether g++ accepts -g... yes
> checking dependency style of g++... gcc3
> checking for ar... ar
> checking for ranlib... ranlib
> checking build system type... x86_64-pc-linux-gnu
> checking host system type... x86_64-pc-linux-gnu
> checking how to print strings... printf
> checking for a sed that does not truncate output... /usr/bin/sed
> checking for fgrep... /usr/bin/grep -F
> checking for ld used by gcc... /usr/x86_64-suse-linux/bin/ld
> checking if the linker (/usr/x86_64-suse-linux/bin/ld) is GNU ld... yes
> checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
> checking the name lister (/usr/bin/nm -B) interface... BSD nm
> checking whether ln -s works... yes
> checking the maximum length of command line arguments... 1572864
> checking how to convert x86_64-pc-linux-gnu file names to
> x86_64-pc-linux-gnu format... func_convert_file_noop
> checking how to convert x86_64-pc-linux-gnu file names to toolchain
> format... func_convert_file_noop
> checking for /usr/x86_64-suse-linux/bin/ld option to reload object 
> files... -r
> checking for objdump... objdump
> checking how to recognize dependent libraries... pass_all
> checking for dlltool... no
> checking how to associate runtime and link libraries... printf %s\n
> checking for archiver @FILE support... @
> checking for strip... strip
> checking for ranlib... (cached) ranlib
> checking command to parse /usr/bin/nm -B output from gcc object... ok
> checking for sysroot... no
> checking for a working dd... /usr/bin/dd
> checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
> checking for mt... no
> checking if : is a manifest tool... no
> checking for dlfcn.h... yes
> checking for objdir... .libs
> checking if gcc supports -fno-rtti -fno-exceptions... no
> checking for gcc option to produce PIC... -fPIC -DPIC
> checking if gcc PIC flag -fPIC -DPIC works... yes
> checking if gcc static flag -static works... no
> checking if gcc supports -c -o file.o... yes
> checking if gcc supports -c -o file.o... (cached) yes
> checking whether the gcc linker (/usr/x86_64-suse-linux/bin/ld -m
> elf_x86_64) supports shared libraries... yes
> checking whether -lc should be explicitly linked in... no
> checking dynamic linker characteristics... GNU/Linux ld.so
> checking how to hardcode library paths into programs... immediate
> checking whether stripping libraries is possible... yes
> checking if libtool supports shared libraries... yes
> checking whether to build shared libraries... yes
> checking whether to build static libraries... no
> checking how to run the C++ preprocessor... g++ -E
> checking for ld used by g++... /usr/x86_64-suse-linux/bin/ld -m 
> elf_x86_64
> checking if the linker (/usr/x86_64-suse-linux/bin/ld -m elf_x86_64)
> is GNU ld... yes
> checking whether the g++ linker (/usr/x86_64-suse-linux/bin/ld -m
> elf_x86_64) supports shared libraries... yes
> checking for g++ option to produce PIC... -fPIC -DPIC
> checking if g++ PIC flag -fPIC -DPIC works... yes
> checking if g++ static flag -static works... no
> checking if g++ supports -c -o file.o... yes
> checking if g++ supports -c -o file.o... (cached) yes
> checking whether the g++ linker (/usr/x86_64-suse-linux/bin/ld -m
> elf_x86_64) supports shared libraries... yes
> checking dynamic linker characteristics... (cached) GNU/Linux ld.so
> checking how to hardcode library paths into programs... immediate
> checking whether make sets $(MAKE)... (cached) yes
> checking for asciidoc... no
> checking for pygmentize... pygmentize
> checking for ./DIST... no
> checking for gdc-8... no
> checking for gdc-7... no
> checking for gdc-6... no
> checking for gdc-5... no
> checking for javac... no
> checking for ruby... /usr/bin/ruby
> checking for mcs... no
> checking for go... /usr/bin/go
> checking for ocaml... no
> checking for rustc... no
> checking for julia... no
> checking for gnustep-config... no
> checking checking if ragel ASM tests will build ... ... no
> checking for crack... no
> checking that generated files are newer than configure... done
> configure: creating ./config.status
> config.status: creating Makefile
> config.status: creating aapl/Makefile
> config.status: creating libfsm/Makefile
> config.status: creating src/Makefile
> config.status: creating cgil/Makefile
> config.status: creating test/Makefile
> config.status: creating test/aapl.d/Makefile
> config.status: creating test/colm.d/Makefile
> config.status: creating test/rlhc.d/Makefile
> config.status: creating test/rlparse.d/Makefile
> config.status: creating test/trans.d/Makefile
> config.status: creating doc/Makefile
> config.status: creating doc/colm/Makefile
> config.status: creating src/config.h
> config.status: src/config.h is unchanged
> config.status: creating src/defs.h
> config.status: src/defs.h is unchanged
> config.status: executing depfiles commands
> config.status: executing libtool commands
> configuration of colm complete
> 10:26 a4:../colm/colm-0.14.1 » make -j1 V=0
> Making all in aapl
> make[1]: Entering directory '~/colm-0.14.1/aapl'
> make[1]: Nothing to be done for 'all'.
> make[1]: Leaving directory '~/colm-0.14.1/aapl'
> Making all in libfsm
> make[1]: Entering directory '~/colm-0.14.1/libfsm'
>   CXX      libfsm_la-idbase.lo
>   CXX      libfsm_la-fsmstate.lo
>   CXX      libfsm_la-fsmbase.lo
>   CXX      libfsm_la-fsmattach.lo
>   CXX      libfsm_la-fsmmin.lo
>   CXX      libfsm_la-fsmgraph.lo
> In file included from ragel.h:30,
>                  from fsmgraph.h:27,
>                  from fsmgraph.cc:26:
> ../aapl/vector.h: In instantiation of ‘void Vector<T,
> Resize>::makeRawSpaceFor(long int, long int) [with T = Key; Resize =
> ResizeExpn]’:
> ../aapl/bstcommon.h:479:29:   required from ‘Key* BstSet<Key, Compare,
> Resize>::insert(const Key&, Key**) [with Key = Key; Compare = CmpKey;
> Resize = ResizeExpn]’
> fsmgraph.cc:110:36:   required from here
> ../aapl/vector.h:1178:10: warning: ‘void* memmove(void*, const void*,
> size_t)’ writing to an object of non-trivially copyable type ‘struct
> Key’; use copy-assignment or copy-initialization instead
> [-Wclass-memaccess]
>  1178 |   memmove(BaseTable::data + pos + len, BaseTable::data + pos,
>       |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>  1179 |    sizeof(T)*(BaseTable::tabLen-pos));
>       |    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> In file included from ragel.h:32,
>                  from fsmgraph.h:27,
>                  from fsmgraph.cc:26:
> common.h:128:8: note: ‘struct Key’ declared here
>   128 | struct Key
>       |        ^~~
> In file included from ragel.h:30,
>                  from fsmgraph.h:27,
>                  from fsmgraph.cc:26:
> ../aapl/vector.h: In instantiation of ‘void Vector<T,
> Resize>::upResize(long int) [with T = Key; Resize = ResizeExpn]’:
> ../aapl/vector.h:1174:2:   required from ‘void Vector<T,
> Resize>::makeRawSpaceFor(long int, long int) [with T = Key; Resize =
> ResizeExpn]’
> ../aapl/bstcommon.h:479:29:   required from ‘Key* BstSet<Key, Compare,
> Resize>::insert(const Key&, Key**) [with Key = Key; Compare = CmpKey;
> Resize = ResizeExpn]’
> fsmgraph.cc:110:36:   required from here
> ../aapl/vector.h:659:34: warning: ‘void* realloc(void*, size_t)’
> moving an object of non-trivially copyable type ‘struct Key’; use
> ‘new’ and ‘delete’ instead [-Wclass-memaccess]
>   659 |    BaseTable::data = (T*) realloc( BaseTable::data, sizeof(T)
> * newLen );
>       |                           
> ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> In file included from ragel.h:32,
>                  from fsmgraph.h:27,
>                  from fsmgraph.cc:26:
> common.h:128:8: note: ‘struct Key’ declared here
>   128 | struct Key
>       |        ^~~
>   CXX      libfsm_la-fsmap.lo
>   CXX      libfsm_la-fsmcond.lo
>   CXX      libfsm_la-fsmnfa.lo
>   CXX      libfsm_la-common.lo
>   CXX      libfsm_la-redfsm.lo
> In file included from redfsm.h:31,
>                  from redfsm.cc:23:
> ../aapl/vector.h: In instantiation of ‘void Vector<T,
> Resize>::remove(long int, long int) [with T = RedTransEl; Resize =
> ResizeExpn]’:
> ../aapl/vector.h:177:42:   required from ‘void Vector<T,
> Resize>::remove(long int) [with T = RedTransEl; Resize = ResizeExpn]’
> redfsm.cc:606:26:   required from here
> ../aapl/vector.h:1041:10: warning: ‘void* memmove(void*, const void*,
> size_t)’ writing to an object of non-trivially copyable type ‘struct
> RedTransEl’; use copy-assignment or copy-initialization instead
> [-Wclass-memaccess]
>  1041 |   memmove(dst, dst + len, sizeof(T)*lenToSlideOver);
>       |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> In file included from redfsm.cc:23:
> redfsm.h:473:8: note: ‘struct RedTransEl’ declared here
>   473 | struct RedTransEl
>       |        ^~~~~~~~~~
> In file included from redfsm.h:31,
>                  from redfsm.cc:23:
> ../aapl/vector.h: In instantiation of ‘void Vector<T,
> Resize>::upResize(long int) [with T = RedTransEl; Resize =
> ResizeExpn]’:
> ../aapl/vector.h:878:3:   required from ‘void Vector<T,
> Resize>::replace(long int, const T*, long int) [with T = RedTransEl;
> Resize = ResizeExpn]’
> ../aapl/vector.h:277:45:   required from ‘void Vector<T,
> Resize>::append(const T&) [with T = RedTransEl; Resize = ResizeExpn]’
> redfsm.cc:605:34:   required from here
> ../aapl/vector.h:659:34: warning: ‘void* realloc(void*, size_t)’
> moving an object of non-trivially copyable type ‘struct RedTransEl’;
> use ‘new’ and ‘delete’ instead [-Wclass-memaccess]
>   659 |    BaseTable::data = (T*) realloc( BaseTable::data, sizeof(T)
> * newLen );
>       |                           
> ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> In file included from redfsm.cc:23:
> redfsm.h:473:8: note: ‘struct RedTransEl’ declared here
>   473 | struct RedTransEl
>       |        ^~~~~~~~~~
> In file included from redfsm.h:31,
>                  from redfsm.cc:23:
> ../aapl/vector.h: In instantiation of ‘void Vector<T,
> Resize>::downResize(long int) [with T = RedTransEl; Resize =
> ResizeExpn]’:
> ../aapl/vector.h:1044:2:   required from ‘void Vector<T,
> Resize>::remove(long int, long int) [with T = RedTransEl; Resize =
> ResizeExpn]’
> ../aapl/vector.h:177:42:   required from ‘void Vector<T,
> Resize>::remove(long int) [with T = RedTransEl; Resize = ResizeExpn]’
> redfsm.cc:606:26:   required from here
> ../aapl/vector.h:690:34: warning: ‘void* realloc(void*, size_t)’
> moving an object of non-trivially copyable type ‘struct RedTransEl’;
> use ‘new’ and ‘delete’ instead [-Wclass-memaccess]
>   690 |    BaseTable::data = (T*) realloc( BaseTable::data, sizeof(T)
> * newLen );
>       |                           
> ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> In file included from redfsm.cc:23:
> redfsm.h:473:8: note: ‘struct RedTransEl’ declared here
>   473 | struct RedTransEl
>       |        ^~~~~~~~~~
> 
> [...]
> [...]
> 
>   CXXLD    test_compare
>   CXX      test_string.o
>   CXXLD    test_string
>   CXX      test_rope.o
>   CXXLD    test_rope
> sedsubst: generating gentests from gentests.sh
> make[2]: Leaving directory '~/colm-0.14.1/test/aapl.d'
> Making all in colm.d
> make[2]: Entering directory '~/colm-0.14.1/test/colm.d'
> sedsubst: generating gentests from gentests.sh
> make[2]: Leaving directory '~/colm-0.14.1/test/colm.d'
> Making all in rlhc.d
> make[2]: Entering directory '~/colm-0.14.1/test/rlhc.d'
> ../../src/colm -b rlhc_object -o rlhc rlhc.lm
> gcc: error: ~/colm-0.14.1/src/.libs/libcolm.a: No such file or 
> directory
> error: colm: there was a problem compiling the output
> make[2]: *** [Makefile:5526: rlhc] Error 1
> make[2]: Leaving directory '~/colm-0.14.1/test/rlhc.d'
> make[1]: *** [Makefile:438: all-recursive] Error 1
> make[1]: Leaving directory '~/colm-0.14.1/test'
> make: *** [Makefile:485: all-recursive] Error 1
> 
> _______________________________________________
> colm-users mailing list
> colm-users at colm.net
> http://www.colm.net/cgi-bin/mailman/listinfo/colm-users



More information about the colm-users mailing list