On Wed, 2019-03-13 at 10:29 +0100, Florian Weimer wrote:
* Sérgio Basto:
> [3]
> export LDFLAGS="%{?__global_ldflags} -shared"
Not sure why you think this would work. It prevents the compiler
from
creating any executables at all.
With -shared fixed this generation of binaries [1], it is a tip mention
in old thread mention in my previous email, AFAIU.
[1]
g++ -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2
-Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong
-grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1
-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=i686
-mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-
unwind-tables -fstack-clash-protection -fcf-protection -pthread
-std=c++11 -Wl,-z -Wl,relro -Wl,--as-needed -Wl,-z -Wl,now
-specs=/usr/lib/rpm/redhat/redhat-hardened-ld -o projectM-unittest
projectM-unittest.o getConfigFilename.o -pthread -lSDL2
../libprojectM/.libs/libprojectM.so -lGL -ldl -pthread -
D__LIBTOOL_NO_RPATH__ -shared
The problem is earlier, here:
libtool: link: g++ -fPIC -DPIC -shared -nostdlib
/usr/lib/gcc/i686-redhat-linux/9/../../../crti.o
/usr/lib/gcc/i686-redhat-linux/9/crtbeginS.o .libs/ConfigFile.o
.libs/Preset.o .libs/PresetLoader.o .libs/timer.o
.libs/KeyHandler.o
.libs/PresetChooser.o .libs/TimeKeeper.o .libs/PCM.o
.libs/PresetFactory.o .libs/fftsg.o .libs/wipemalloc.o
.libs/PipelineMerger.o .libs/PresetFactoryManager.o
.libs/projectM.o
.libs/TestRunner.o -Wl,--whole-archive
../libprojectM/MilkdropPresetFactory/.libs/libMilkdropPresetFactory.a
../libprojectM/NativePresetFactory/.libs/libNativePresetFactory.a
../libprojectM/Renderer/.libs/libRenderer.a -Wl,--no-whole-archive
-lGL
-ldl -L/usr/lib/gcc/i686-redhat-linux/9
-L/usr/lib/gcc/i686-redhat-linux/9/../../.. -lstdc++ -lm -lc
-lgcc_s
/usr/lib/gcc/i686-redhat-linux/9/crtendS.o
/usr/lib/gcc/i686-redhat-linux/9/../../../crtn.o -Wl,-z,now
-specs=/usr/lib/rpm/redhat/redhat-hardened-ld -O2 -g
-fstack-protector-strong -grecord-gcc-switches
-specs=/usr/lib/rpm/redhat/redhat-hardened-cc1
-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32 -march=i686
-mtune=generic -msse2 -mfpmath=sse -mstackrealign -pthread -Wl,-z
-Wl,relro -Wl,--as-needed -Wl,-z -Wl,now
-specs=/usr/lib/rpm/redhat/redhat-hardened-ld -pthread -pthread
-Wl,-soname -Wl,libprojectM.so.3 -o .libs/libprojectM.so.3.1.1
That linker command is just wrong. You just can't use -nostdlib in
this
way. There is no reference to libgcc, which is implicitly provided
without -nostdlib.
I don't know why libtool attempts to link with -nostdlib.
Removing -nostdlib and all references to /usr/lib/gcc/i686-redhat-
linux/9/ [2] I also could build libprojectM.so.3.1.1 , but not fixed
this error (hidden symbol `__cpu_model' in /usr/lib/gcc/i686-redhat-
linux/9/libgcc.a(cpuinfo.o) is referenced by DSO)
I notice -nostdlib is only used one time in all build and its also
present on x86_64 and don't cause problems ...
Thanks for the help, any other tip ?
[2]
g++ -fPIC -DPIC -shared .libs/ConfigFile.o .libs/Preset.o
.libs/PresetLoader.o .libs/timer.o .libs/KeyHandler.o
.libs/PresetChooser.o .libs/TimeKeeper.o .libs/PCM.o
.libs/PresetFactory.o .libs/fftsg.o .libs/wipemalloc.o
.libs/PipelineMerger.o .libs/PresetFactoryManager.o .libs/projectM.o
.libs/TestRunner.o -Wl,--whole-archive
../libprojectM/MilkdropPresetFactory/.libs/libMilkdropPresetFactory.a
../libprojectM/NativePresetFactory/.libs/libNativePresetFactory.a
../libprojectM/Renderer/.libs/libRenderer.a -Wl,
--no-whole-archive -lGL -ldl -Wl,-z,now
-specs=/usr/lib/rpm/redhat/redhat-hardened-ld -O2 -g -fstack-protector-
strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-
hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m32
-march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -pthread
-Wl,-z -Wl,relro -Wl,--as-needed -Wl,-z -Wl,now
-specs=/usr/lib/rpm/redhat/redhat-hardened-ld -pthread -pthread -Wl,-
soname -Wl,libprojectM.so.3 -o .libs/libprojectM.so.3.1.1
Thanks,
Florian
--
Sérgio M. B.