�Igor,I have 32bits version of needed libraries - they are installed by package�libc6-dev-i386 in /usr/lib32I've created�CogDebian64Config and adjust linkFlags / commonCompilerFlags so I have:CogDebian64Config new linkFlags�'-lSM -lICE -ldl -lGL -lpthread -lm -lnsl -lX11 -m32 -L/usr/lib32'CogDebian64Config new compilerFlags ' -DLSB_FIRST=1 -DUSE_GLOBAL_STRUCT=0 -DCOGMTVM=0 -m32 -L/usr/lib32 -g0 -O2 -msse2 -D_GNU_SOURCE -DNDEBUG -DITIMER_HEARTBEAT=1�-DNO_VM_PROFILE=1 -DDEBUGVM=0'but when I make VERBOSE=1 �Linking C shared library /root/securedvm/results/vm-display-nullcd /root/securedvm/build/vm-display-null && /usr/bin/cmake -E cmake_link_script CMakeFiles/vm-display-null.dir/link.txt --verbose=1/usr/bin/gcc �-fPIC � -shared -Wl,-soname,vm-display-null -o /root/securedvm/results/vm-display-null CMakeFiles/vm-display-null.dir/root/securedvm/platforms/unix/vm-display-null/sqUnixDisplayNull.c.o -lm -ldl -lpthread�collect2: ld terminated with signal 11 [Segmentation fault]/usr/bin/ld: i386 architecture of input file `CMakeFiles/vm-display-null.dir/root/securedvm/platforms/unix/vm-display-null/sqUnixDisplayNull.c.o' is incompatible with i386:x86-64 outputSo it seems compilerFlags are not used for building vm-display-null !!!�
Same result if I export CC="gcc -m32"Flags are used for building CogVM though:[ 57%] Building C object JPEGReadWriter2Plugin/CMakeFiles/JPEGReadWriter2Plugin.dir/root/securedvm/platforms/Cross/plugins/JPEGReadWriter2Plugin/jquant2.c.ocd /root/securedvm/build/JPEGReadWriter2Plugin && /usr/bin/gcc �-DLSB_FIRST=1 -DUSE_GLOBAL_STRUCT=0 -DCOGMTVM=0 -D_GNU_SOURCE -DNDEBUG -DITIMER_HEARTBEAT=1 -DNO_VM_PROFILE=1 -DDEBUGVM=0 -DSQUEAK_BUILTIN_PLUGIN -DLSB_FIRST=1 -DUSE_GLOBAL_STRUCT=0 -DCOGMTVM=0 -D_GNU_SOURCE -DNDEBUG -DITIMER_HEARTBEAT=1 -DNO_VM_PROFILE=1 -DDEBUGVM=0 -I/root/securedvm/platforms/unix/plugins/B3DAcceleratorPlugin -I/root/securedvm/platforms/Cross/vm -I/root/securedvm/src/vm -I/root/securedvm/platforms/unix/vm -I/root/securedvm/build -I/root/securedvm/src/plugins/JPEGReadWriter2Plugin -I/root/securedvm/platforms/Cross/plugins/JPEGReadWriter2Plugin -I/root/securedvm/platforms/unix/plugins/JPEGReadWriter2Plugin � -m32 -L/usr/lib32 -g0 -O2 -msse2 -m32 -L/usr/lib32 -g0 -O2 -msse2 -o CMakeFiles/JPEGReadWriter2Plugin.dir/root/securedvm/platforms/Cross/plugins/JPEGReadWriter2Plugin/jquant2.c.o � -c /root/securedvm/platforms/Cross/plugins/JPEGReadWriter2Plugin/jquant2.cLaurentOn Sun, Aug 14, 2011 at 10:10 PM, Igor Stasenko <siguctua@gmail.com> wrote:
looks like you don't have 32bit version of this library.
On 14 August 2011 18:39, laurent laffont <laurent.laffont@gmail.com> wrote:
>
> Thanks Levente.
> After searching & trying finally I've passed this problem by:
> mv /usr/bin/gcc /usr/bin/real.gcc
> and then creating /usr/bin/gcc :
> #!/bin/sh
> exec real.gcc -m32 $@
> and chmod +x /usr/bin/gcc
>
> Now I have:
> [ 94%] Built target vm-display-null
> Scanning dependencies of target vm-display-X11
> [ 94%] Building C object vm-display-X11/CMakeFiles/vm-display-X11.dir/root/securedvm/platforms/unix/vm-display-X11/sqUnixX11.c.o
> [ 95%] Building C object vm-display-X11/CMakeFiles/vm-display-X11.dir/root/securedvm/platforms/unix/vm-display-X11/sqUnixMozilla.c.o
> Linking C shared library /root/securedvm/results/vm-display-X11
> /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libSM.so when searching for -lSM
> /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libSM.a when searching for -lSM
> /usr/bin/ld: skipping incompatible /usr/lib/libSM.so when searching for -lSM
> /usr/bin/ld: skipping incompatible /usr/lib/libSM.a when searching for -lSM
> /usr/bin/ld: cannot find -lSM
> collect2: ld returned 1 exit status
>
That's why it refusing to link.
As for compiler options, i don't think that you need to use
workarounds (like creating real.gcc etc) , because the -m32 flag is
there:
# This is automatically generated file using CogUnixConfig on 14
August 2011 10:01:34 pm
...
message("Adding module: vm-sound-null")
add_definitions( -DLSB_FIRST=1 -DUSE_GLOBAL_STRUCT=0 -DCOGMTVM=0 -m32� � � �-DNO_VM_PROFILE=1 -DDEBUGVM=0)
-g0 -O2 -msse2 -D_GNU_SOURCE -DNDEBUG -DITIMER_HEARTBEAT=1
...
Try building using:
make VERBOSE=1
to see what flags are passed to compiler.
And please, create a subclass of CogUnixConfig , like
Cog32OnDebian64Config
and play with definitions there.
In image you can do:
Cog32OnDebian64Config generateWithSources
or
Cog32OnDebian64Config generate
the difference that first will generate cmake files + source files,
while second one is only cmake files (takes less than second)
I suspecting that problem with linker flags, which tries to link
32-bit output with 64-bit binary.
It seems that we're missing the flag there that it should use 32-bit
binary for output.
--
> Laurent
>
> On Sat, Aug 13, 2011 at 4:36 PM, Levente Uzonyi <leves@elte.hu> wrote:
>>
>> On Sat, 13 Aug 2011, laurent laffont wrote:
>>
>> (no quotes thx to gmail...)
>>
>> This issue was discussed several times. The simplest solution is to define CC as "gcc -m32" (and optionally CXX as "g++ -m32" if you need g++). Another solution is to check how cmake supports cross compilation. IIRC autotools has some flags for this.
>>
>>
>> Levente
>
>
>
Best regards,
Igor Stasenko AKA sig.