Opened 10 years ago

Closed 10 years ago

#3231 closed defect (fixed)

/usr/lib/omc/libSimulationRuntimeC.so: undefined symbol: GC_set_force_unmap_on_gcollect

Reported by: anonymous Owned by: Martin Sjölund
Priority: high Milestone: 1.9.3
Component: Build Environment Version: trunk
Keywords: GC_set_force_unmap_on_gcollect Cc:

Description

When trying to simulate a random Modelica example with the current Debian 7 wheezy packages from the stable APT repository at http://build.openmodelica.org/apt, the compilation succeeds, but the simulation aborts with messages like:

/tmp/OpenModelica_foobar/OMEdit/Modelica.Blocks.Examples.Filter: symbol lookup error: /usr/lib/omc/libSimulationRuntimeC.so: undefined symbol: GC_set_force_unmap_on_gcollect

I have not tried all examples (obviously, because that would take to long), but this occurs with every example I tried so far. Current package version for omc is 25115-1 from the APT repository mentioned abobe. Installed GCC packages are gcc-4.6 (4.6.3-14) and gcc-4.7 (4.7.2-5) from the official Debian repositories, if that helps to pin down the reason for this error.

Steps to reproduce the error:

  • Install Debian packages (version 25115-1) for OpenModelica from http://build.openmodelica.org/apt at a machine running on Debian 7.8 "Wheezy".
  • Open the OpenModelica Connection Editor.
  • Pick an example model, e.g. Modelica.Blocks.Examples.Filter for simulation.
  • Click "Simulate".

Change History (6)

comment:1 by Martin Sjölund, 10 years ago

If you run ldd on /usr/lib/omc/libSimulationRuntimeC.so and /tmp/OpenModelica_foobar/OMEdit/Modelica.Blocks.Examples.Filter, do they list /usr/lib/omc/libgc.so or another version of libgc?

comment:2 by Adrian Pop, 10 years ago

The problem is most likely that you're using an older version of libgc which is compiled with different flags. OpenModelica ships its own version which should be used instead.

Last edited 10 years ago by Adrian Pop (previous) (diff)

in reply to:  1 comment:3 by anonymous, 10 years ago

Replying to sjoelund.se:

If you run ldd on /usr/lib/omc/libSimulationRuntimeC.so and /tmp/OpenModelica_foobar/OMEdit/Modelica.Blocks.Examples.Filter, do they list /usr/lib/omc/libgc.so or another version of libgc?

$ ldd /tmp/OpenModelica_foobar/OMEdit/Modelica.Blocks.Examples.Filter
	linux-gate.so.1 =>  (0xb7710000)
	libModelicaExternalC.so.0 => /usr/lib/omc/libModelicaExternalC.so.0 (0xb7707000)
	libSimulationRuntimeC.so => /usr/lib/omc/libSimulationRuntimeC.so (0xb75c1000)
	liblapack.so.3 => /usr/lib/liblapack.so.3 (0xb6dcf000)
	libblas.so.3 => /usr/lib/libblas.so.3 (0xb6d4c000)
	libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xb6d06000)
	libgc.so.1 => /usr/lib/libgc.so.1 (0xb6cc1000)
	libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xb6ca7000)
	libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb6b43000)
	libhdf5.so.7 => /usr/lib/libhdf5.so.7 (0xb6862000)
	libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb6849000)
	librt.so.1 => /lib/i386-linux-gnu/i686/cmov/librt.so.1 (0xb6840000)
	libexpat.so.1 => /lib/i386-linux-gnu/libexpat.so.1 (0xb6817000)
	libdl.so.2 => /lib/i386-linux-gnu/i686/cmov/libdl.so.2 (0xb6813000)
	libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb6727000)
	libsundials_kinsol.so.1 => /usr/lib/libsundials_kinsol.so.1 (0xb6710000)
	libsundials_nvecserial.so.0 => /usr/lib/libsundials_nvecserial.so.0 (0xb670b000)
	libipopt.so.1 => /usr/lib/omc/libipopt.so.1 (0xb64e9000)
	libcoinmumps.so.1 => /usr/lib/omc/libcoinmumps.so.1 (0xb6361000)
	liblis.so.0 => /usr/lib/omc/liblis.so.0 (0xb62de000)
	libcminpack.so.1 => /usr/lib/omc/libcminpack.so.1 (0xb62c9000)
	libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb62ac000)
	libgfortran.so.3 => /usr/lib/i386-linux-gnu/libgfortran.so.3 (0xb61b1000)
	libquadmath.so.0 => /usr/lib/i386-linux-gnu/libquadmath.so.0 (0xb613a000)
	/lib/ld-linux.so.2 (0xb7711000)
$ ldd /usr/lib/omc/libSimulationRuntimeC.so 
	linux-gate.so.1 =>  (0xb77a4000)
	librt.so.1 => /lib/i386-linux-gnu/i686/cmov/librt.so.1 (0xb7634000)
	libexpat.so.1 => /lib/i386-linux-gnu/libexpat.so.1 (0xb760c000)
	libgc.so.1 => /usr/lib/omc/libgc.so.1 (0xb7554000)
	libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xb753b000)
	libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xb7515000)
	libdl.so.2 => /lib/i386-linux-gnu/i686/cmov/libdl.so.2 (0xb7511000)
	libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb7425000)
	libsundials_kinsol.so.1 => /usr/lib/libsundials_kinsol.so.1 (0xb740d000)
	libsundials_nvecserial.so.0 => /usr/lib/libsundials_nvecserial.so.0 (0xb7408000)
	liblapack.so.3 => /usr/lib/liblapack.so.3 (0xb6c16000)
	libblas.so.3 => /usr/lib/libblas.so.3 (0xb6b93000)
	libipopt.so.1 => /usr/lib/omc/libipopt.so.1 (0xb6972000)
	libcoinmumps.so.1 => /usr/lib/omc/libcoinmumps.so.1 (0xb67e9000)
	liblis.so.0 => /usr/lib/omc/liblis.so.0 (0xb6766000)
	libcminpack.so.1 => /usr/lib/omc/libcminpack.so.1 (0xb6751000)
	libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb6734000)
	libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb65d0000)
	/lib/ld-linux.so.2 (0xb77a5000)
	libgfortran.so.3 => /usr/lib/i386-linux-gnu/libgfortran.so.3 (0xb64d5000)
	libquadmath.so.0 => /usr/lib/i386-linux-gnu/libquadmath.so.0 (0xb645e000)

So, yes, /usr/lib/omc/libSimulationRuntimeC.so links to OpenModelica's libgc in /usr/lib/omc/, but /tmp/OpenModelica_foobar/OMEdit/Modelica.Blocks.Examples.Filter links to the system's libgc, i.e. /usr/lib/libgc.so.1 in that case.

Replying to adrpo:

The problem is most likely that you're using an older version of libgc which is compiled with different flags. OpenModelica ships its own version which should be used instead.

As you can see from the output above, OpenModelica's version of libgc is used, but only in one case, not in both.
I suppose there could be a compiler option to tell g++ to look for libgc in /usr/lib/omc before falling back to the system default, but

  • a) I do not know what that option is, and OpenModelica should use such an option by default, if it ships its own versions of system libraries. Otherwise one might encounter the same problem with other simulation models, too.

If that is not the way to go, then there might be another option:

  • b) Don't ship own version of libgc (or other libraries) and make OpenModelica work with the libraries provided by the default Debian packages. In my opinion that would be the "cleanest" approach, but it might also be the one that requires the most work.

comment:4 by jon.hornstein@…, 10 years ago

I noticed swapping on the link line

-L/usr/lib/" -Wl,-rpath="/usr/lib/" -L/usr/lib/omc" -Wl,-rpath="/usr/lib/omc"

to

-L/usr/lib/omc" -Wl,-rpath="/usr/lib/omc" -L/usr/lib/" -Wl,-rpath="/usr/lib/"

fixed the problem

comment:5 by Martin Sjölund, 10 years ago

Component: UnknownBuild Environment
Owner: changed from somebody to Martin Sjölund
Status: newassigned

The current nightly should be working. The stable will become the same version later.

comment:6 by Martin Sjölund, 10 years ago

Resolution: fixed
Status: assignedclosed
Note: See TracTickets for help on using tickets.