libtool
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

-export-symbols-regex seems to produce wrong version maps


From: Jan Engelhardt
Subject: -export-symbols-regex seems to produce wrong version maps
Date: Sun, 16 Feb 2014 13:26:16 +0100 (CET)
User-agent: Alpine 2.11 (LSU 23 2013-08-11)

When -export-symbols-regex is passed to libtool (for example
in the systems source), it generates a version map that gold
does not like:

$ make
make --no-print-directory all-recursive
Making all in .
/bin/sh ./libtool  --tag=CC   --mode=link gcc-4.9 -std=gnu99 -pipe -Wall 
-Wextra -Wno-inline -Wundef -Wformat=2 -Wformat-security -Wformat-nonliteral 
-Wlogical-op -Wsign-compare -Wmissing-include-dirs -Wold-style-definition 
-Wpointer-arith -Winit-self -Wdeclaration-after-statement -Wfloat-equal 
-Wsuggest-attribute=noreturn -Wmissing-prototypes -Wstrict-prototypes 
-Wredundant-decls -Wmissing-declarations -Wmissing-noreturn -Wshadow 
-Wendif-labels -Wcast-align -Wstrict-aliasing=2 -Wwrite-strings -Wno-long-long 
-Wno-overlength-strings -Wno-unused-parameter -Wno-missing-field-initializers 
-Wno-unused-result -Werror=overflow -Wdate-time -Wnested-externs -ffast-math 
-fno-common -fdiagnostics-show-option -fdiagnostics-color -fno-strict-aliasing 
-fvisibility=hidden -ffunction-sections -fdata-sections -fstack-protector 
--param=ssp-buffer-size=4 -flto  -fvisibility=default -pthread 
-I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include  -g -O2 -Wl,--as-needed 
-Wl,--no-undefined -Wl,--gc-sections -Wl,-z,relro -Wl,-z,now -Wl,-fuse-ld=gold  
-version-info 1:3:1 -export-dynamic -no-undefined -export-symbols-regex 
'^g_udev_.*'  -o libgudev-1.0.la -rpath /usr/lib 
src/gudev/libgudev_1_0_la-gudevclient.lo 
src/gudev/libgudev_1_0_la-gudevdevice.lo 
src/gudev/libgudev_1_0_la-gudevenumerator.lo 
src/gudev/libgudev_1_0_la-gudevmarshal.lo 
src/gudev/libgudev_1_0_la-gudevenumtypes.lo libudev.la -lgio-2.0 -lgobject-2.0 
-lglib-2.0  -ldl 
libtool: link: rm -fr  .libs/libgudev-1.0.exp
libtool: link: /usr/bin/nm -B  src/gudev/.libs/libgudev_1_0_la-gudevclient.o 
src/gudev/.libs/libgudev_1_0_la-gudevdevice.o 
src/gudev/.libs/libgudev_1_0_la-gudevenumerator.o 
src/gudev/.libs/libgudev_1_0_la-gudevmarshal.o 
src/gudev/.libs/libgudev_1_0_la-gudevenumtypes.o   | sed -n -e 's/^.*[       
]\([ABCDGIRSTW][ABCDGIRSTW]*\)[         ][      
]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' | sed '/ __gnu_lto/d' | /usr/bin/sed 
's/.* //' | sort | uniq > .libs/libgudev-1.0.exp
libtool: link: /usr/bin/grep -E -e "^g_udev_.*" ".libs/libgudev-1.0.exp" > 
".libs/libgudev-1.0.expT"
libtool: link: mv -f ".libs/libgudev-1.0.expT" ".libs/libgudev-1.0.exp"
libtool: link: echo "{ global:" > .libs/libgudev-1.0.ver
libtool: link:  cat .libs/libgudev-1.0.exp | sed -e "s/\(.*\)/\1;/" >> 
.libs/libgudev-1.0.ver
libtool: link:  echo "local: *; };" >> .libs/libgudev-1.0.ver
libtool: link:  gcc-4.9 -shared  -fPIC -DPIC  
src/gudev/.libs/libgudev_1_0_la-gudevclient.o 
src/gudev/.libs/libgudev_1_0_la-gudevdevice.o 
src/gudev/.libs/libgudev_1_0_la-gudevenumerator.o 
src/gudev/.libs/libgudev_1_0_la-gudevmarshal.o 
src/gudev/.libs/libgudev_1_0_la-gudevenumtypes.o   -Wl,-rpath 
-Wl,/home/jengelh/nocode/systemd/.libs ./.libs/libudev.so -lgio-2.0 
-lgobject-2.0 -lglib-2.0 -ldl  -flto -pthread -O2 -Wl,--as-needed 
-Wl,--no-undefined -Wl,--gc-sections -Wl,-z -Wl,relro -Wl,-z -Wl,now 
-Wl,-fuse-ld=gold   -pthread -Wl,-soname -Wl,libgudev-1.0.so.0 
-Wl,-version-script -Wl,.libs/libgudev-1.0.ver -o .libs/libgudev-1.0.so.0.1.3
/usr/bin/ld.gold: error: .libs/libgudev-1.0.ver:2:1: syntax error, unexpected 
LOCAL, expecting STRING or QUOTED_STRING or EXTERN
/usr/bin/ld.gold: fatal error: unable to parse version script file 
.libs/libgudev-1.0.ver
collect2: error: ld returned 1 exit status
make[2]: *** [libgudev-1.0.la] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

ld.bfd does not like it either:

/usr/lib64/gcc/x86_64-suse-linux/4.9/../../../../x86_64-suse-linux/bin/ld:.libs/libgudev-1.0.ver:2:
 syntax error in VERSION script
collect2: error: ld returned 1 exit status


$ cat .libs/libgudev-1.0.ver

{ global:
local: *; };

What it probably should be:

WHATEVER { global: local: *; };

The culprit might be this line in libtool, which expressly
omits "WHATEVER".

archive_expsym_cmds="echo \\\"{ global:\\\" > \$output_objdir/\$libname.ver~

System is using automake 1.14, libtool 2.4.2, autoconf 2.69,
binutils 2.23.2, gcc 4.8/4.9.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]