Opened 8 years ago

Closed 6 years ago

Last modified 6 years ago

#3618 closed defect (fixed)

Compiling From Source Fedora 23

Reported by: r.trevor.clark@… Owned by: somebody
Priority: high Milestone: 1.12.0
Component: Installation program Version:
Keywords: Fedora Cc:

Description

Hi I have compiled OpenModelica from the latest Git Source. However, I ran into a few issues compiling on Fedora 23. I don't have too much experience so I could have made some mistakes. I have the project in ~/OM/OpenModelica_12_27

On Thing is that the $QTDIR on my system points to /usr/lib64/qt-3.3 and not /usr/lib64/qt4 so I had to pass the argument QTDIR=/usr/lib64/qt4 in the ./configure step

I started the super project by using the configure options as shown on the website

$ autoconf
$ ./configure CC=clang CXX=clang++ QTDIR=/usr/lib64/qt4
$ make -j8

This compiled the OMCompiler, but the rest of the sub projects OMEdit, OMNotebook etc did not compile automatically, though I don't know if they are supposed to.

OMPlot and OMEdit compiled fine after that.

However when I compiled OMNotebook, OMShell, and OMOptim I got some errors.

OMNotebook:

I was able to get it to compile by changing from clang to gcc and then back to clang. Here is the process I followed.

cd OMNotebook
autoconf
./configure --with-ombuilddir=/home/tclark/OM/OpenModelica_12_27/build/ --prefix=/home/tclark/OM/OpenModelica_12_27/build/ CXX=clang++ QTDIR=/usr/lib64/qt4

make

This gave the error:

textcell.cpp:446:15: error: format string is not a string literal (potentially insecure) [-Werror,-Wformat-security]

qDebug( text.toStdString().c_str() );

~

1 error generated.
Makefile:745: recipe for target 'textcell.o' failed

then I configure again without specifying clang.

./configure --with-ombuilddir=/home/tclark/OM/OpenModelica_12_27/build/ --prefix=/home/tclark/OM/OpenModelica_12_27/build/ QTDIR=/usr/lib64/qt4

make

This resulted in this error:

/usr/bin/ld: cellapplication.o: relocation R_X86_64_32S against `_ZTVN4IAEX15CellApplicationE' can not be used when making a shared object; recompile with -fPIC
cellapplication.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
Makefile:248: recipe for target '../bin/OMNotebook' failed
make[2]: * bin/OMNotebook Error 1
make[2]: Leaving directory '/home/tclark/OM/OpenModelica_12_27/OMNotebook/OMNotebook/OMNotebookGUI'
Makefile.unix:19: recipe for target 'OMNotebook' failed
make[1]:
* [OMNotebook] Error 2
make[1]: Leaving directory '/home/tclark/OM/OpenModelica_12_27/OMNotebook/OMNotebook/OMNotebookGUI'
Makefile:25: recipe for target 'omnotebook' failed
make: * [omnotebook] Error 2

Then after re configuring with clang again:

./configure --with-ombuilddir=/home/tclark/OM/OpenModelica_12_27/build/ --prefix=/home/tclark/OM/OpenModelica_12_27/build/ CXX=clang++ QTDIR=/usr/lib64/qt4

make

This then seemed to have finished compiling without error and the program seems to work.

I followed the same process for OMShell clang -> gcc -> clang and it also now seems to work.
The two respective errors for the first two attempts at make are :

clang

DQT_CORE_LIB -DQT_SHARED -I/usr/lib64/qt4/mkspecs/linux-g++ -I. -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtXml -I/usr/include -I../generatedfiles/moc -o omc_communicator.o omc_communicator.cpp
omc_communicator.cpp:219:15: error: format string is not a string literal (potentially insecure) [-Werror,-Wformat-security]

qWarning( tmp.c_str() );


1 error generated.
Makefile:264: recipe for target 'omc_communicator.o' failed
make[2]: * [omc_communicator.o] Error 1
make[2]: Leaving directory '/home/tclark/OM/OpenModelica_12_27/OMShell/OMShell/OMShellGUI'
Makefile.unix:20: recipe for target 'OMShell' failed
make[1]:
* [OMShell] Error 2
make[1]: Leaving directory '/home/tclark/OM/OpenModelica_12_27/OMShell/OMShell/OMShellGUI'
Makefile:24: recipe for target 'omshell' failed
make: * [omshell] Error 2

gcc

mnithread -lQtXml -lQtGui -lQtCore -lpthread
/usr/bin/ld: commandcompletion.o: relocation R_X86_64_32S against `_ZTVN4IAEX17CommandCompletionE' can not be used when making a shared object; recompile with -fPIC
commandcompletion.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
Makefile:120: recipe for target '../bin/OMShell' failed
make[2]: * bin/OMShell Error 1
make[2]: Leaving directory '/home/tclark/OM/OpenModelica_12_27/OMShell/OMShell/OMShellGUI'
Makefile.unix:20: recipe for target 'OMShell' failed
make[1]:
* [OMShell] Error 2
make[1]: Leaving directory '/home/tclark/OM/OpenModelica_12_27/OMShell/OMShell/OMShellGUI'
Makefile:24: recipe for target 'omshell' failed
make: * [omshell] Error 2

So everything up to then now works.

However, I was unable to get OMOptim to compile at all.
Here are the two errors I got when trying to compile with clang then gcc.

clang

/usr/bin/ld: cellapplication.o: relocation R_X86_64_32S against `_ZTVN4IAEX15CellApplicationE' can not be used when making a shared object; recompile with -fPIC
cellapplication.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
Makefile:248: recipe for target '../bin/OMNotebook' failed
make[2]: * bin/OMNotebook Error 1
make[2]: Leaving directory '/home/tclark/OM/OpenModelica_12_27/OMNotebook/OMNotebook/OMNotebookGUI'
Makefile.unix:19: recipe for target 'OMNotebook' failed
make[1]:
* [OMNotebook] Error 2
make[1]: Leaving directory '/home/tclark/OM/OpenModelica_12_27/OMNotebook/OMNotebook/OMNotebookGUI'
Makefile:25: recipe for target 'omnotebook' failed
make: * [omnotebook] Error 2

gcc

/usr/bin/ld: ../../ParadisEO-2.0.1/build/moeo/lib/libmoeo.a(moeoObjectiveVectorTraits.cpp.o): relocation R_X86_64_32 against `.bss' can not be used when making a shared object; recompile with -fPIC
../../ParadisEO-2.0.1/build/moeo/lib/libmoeo.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
Makefile:104: recipe for target '../bin/OMOptim' failed
make[2]: * bin/OMOptim Error 1
make[2]: Leaving directory '/home/tclark/OM/OpenModelica_12_27/OMOptim/OMOptim/build'
Makefile.unix:16: recipe for target 'OMOptim' failed
make[1]:
* [OMOptim] Error 2
make[1]: Leaving directory '/home/tclark/OM/OpenModelica_12_27/OMOptim/OMOptim/build'
Makefile:35: recipe for target 'omoptim' failed
make: * [omoptim] Error 2

Again I don't have very much experience and may have missed something obvious or misunderstood directions, but I am looking for some help to understand and be able to get this working as far as compilation (everything appears to work aside from OMOptim).

Thank You!

Attachments (2)

failed tests (9.4 KB) - added by Trevor Clark <r.trevor.clark@…> 8 years ago.
failed tests
clockedTest.mos.fail_log (10.5 KB) - added by r.trevor.clark@… 8 years ago.
fail log

Download all attachments as: .zip

Change History (19)

comment:1 Changed 8 years ago by sjoelund.se

I would not mix clang++ and g++ as you get really weird errors. Also, the initial error you got with clang was due to using -Werror as a default flag. I assume this comes from a Fedora customization. Likely there are customizations for cmake/qmake that set -Werror and do not use -fPIC as it should...

comment:2 Changed 8 years ago by Trevor Clark <r.trevor.clark@…>

Thanks for the reply. I realize that mixing them is not a good idea. That was just how I got them to compile. I have very little experience compiling programs. Luckily OMCompiler, OMPlot, and OMEdit compiled normally, so at least those work. Do you have any suggestions for fixing the -Werror to -fPIC flag? I will see if I can figure it out as well. Thank You!

comment:3 Changed 8 years ago by sjoelund.se

Perhaps adding some CFLAGS and CXXFLAGS:

./configure CFLAGS="-Wno-error -fPIC -Os" CXXFLAGS="-Wno-error -fPIC -Os"

comment:4 Changed 8 years ago by Trevor Clark <r.trevor.clark@…>

I'll give that a try later this week. Thanks again.

comment:5 Changed 8 years ago by Trevor Clark <r.trevor.clark@…>

Thanks for your help. I was able to get it to compile using your suggestion.

I found a couple places in the source files for OMNotebook and OMShell that needed to be changed in order for me to compile. Even though I used the -Wno-error flag, the environment in fedora uses -Werror=format-security flag and causes the compilation to fail. It is a really quick fix that I think should be implemented as per this webpage: https://fedoraproject.org/wiki/Format-Security-FAQ

The change is just specifying a string in print statements, adding "%s".

OMNotebook

textcell.cpp:446 -> qDebug( "%s", text.toStdString().c_str() );

notebook.cpp:145 -> qDebug( "%s", filename_.toStdString().c_str() )

OMShell

omc_communicator.cpp:219 -> qWarning( "%s", tmp.c_str() );

After that the everything seems to have compiled and works.

When I run the testsuite there are a number of failed tests, any advice on how to resolve them? I attached a file with a list of all the failed tests.
This is on omc version: v1.9.4-dev.729+ga646bc7

Changed 8 years ago by Trevor Clark <r.trevor.clark@…>

failed tests

comment:6 Changed 8 years ago by sjoelund.se

My guess is:
make runtimeCPPinstall (in OMCompiler directory for the optional C++ runtime)
./configure ... OMPCC="gcc -fopenmp"

The MetaModelica tests I can't see what is going wrong. Perhaps some extra stack-smashing options added by Fedora? Or some additional flags that need to be passed to the other CFLAGS...

comment:7 Changed 8 years ago by Trevor Clark <r.trevor.clark@…>

I resolved the MetaModelica tests. in the super project using CFLAGS="-Wno-error -fPIC -Os" CXXFLAGS="-Wno-error -fPIC -Os" caused the MetaModelica test errors. After changing the source files for OMNotebook and OMShell I do not need to pass those flags to compile the project.

However even when using ./configure ... --with-cppruntime OMPCC="gcc -fopenmp"
the ./openmodelica/cppruntime/ tests fail.

Anymore ideas for resolving this? Sorry to have so many problems. All the tests pass except for the cppruntime ones, so maybe I should just not use the optiona C++ runtime.

Failed tests:

./openmodelica/cppruntime/BouncingBall.mos
./openmodelica/cppruntime/WhenStatement1.mos
./openmodelica/cppruntime/clockedTest.mos
./openmodelica/cppruntime/clockedTypesTest.mos
./openmodelica/cppruntime/functionPointerTest.mos
./openmodelica/cppruntime/genDebugSymbols/Modelica.Fluid.Examples.BranchingDynamicPipes_genDebugSymbols.mos
./openmodelica/cppruntime/hardcodedStartValues/Modelica.Fluid.Examples.BranchingDynamicPipes_hardcodedStartValues.mos
./openmodelica/cppruntime/hpcom/Modelica.Electrical.Analog.Examples.CauerLowPassSC_level_omp_measureTime.mos
./openmodelica/cppruntime/hpcom/Modelica.Electrical.Analog.Examples.CauerLowPassSC_levelfix_pthreads_memory.mos
./openmodelica/cppruntime/hpcom/Modelica.Electrical.Spice3.Examples.CoupledInductors_level_omp.mos
./openmodelica/cppruntime/hpcom/Modelica.Electrical.Spice3.Examples.CoupledInductors_list_pthreads_spin.mos
./openmodelica/cppruntime/hpcom/Modelica.Thermal.HeatTransfer.Examples.Motor_mcp_omp.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Blocks.Examples.BooleanNetwork1.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Blocks.Examples.Filter.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Electrical.Analog.Examples.CauerLowPassSC.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Electrical.Analog.Examples.ShowSaturatingInductor.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Electrical.Digital.Examples.Counter.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Electrical.QuasiStationary.SinglePhase.Examples.ParallelResonance.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Electrical.Spice3.Examples.CoupledInductors.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Mechanics.MultiBody.Examples.Elementary.DoublePendulum.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Mechanics.MultiBody.Examples.Elementary.RollingWheelSetDriving.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Mechanics.MultiBody.Examples.Elementary.SpringWithMass.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Mechanics.Rotational.Examples.Backlash.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Mechanics.Rotational.Examples.RollingWheel.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Mechanics.Translational.Examples.Accelerate.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Mechanics.Translational.Examples.InitialConditions.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Media.Examples.IdealGasH2O.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Media.Examples.TestOnly.IdealGasN2.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Media.Examples.Tests.MediaTestModels.Air.DryAirNasa.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Media.Examples.WaterIF97.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.StateGraph.Examples.FirstExample.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Thermal.HeatTransfer.Examples.ControlledTemperature.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Thermal.HeatTransfer.Examples.TwoMasses.mos
./openmodelica/cppruntime/libraries/msl32/Modelica.Utilities.Examples.readRealParameterModel.mos
./openmodelica/cppruntime/mathFunctionsTest.mos
./openmodelica/cppruntime/omedit/BouncingBall_OMEdit_flags.mos
./openmodelica/cppruntime/recordTupleReturnTest.mos
./openmodelica/cppruntime/solveTest.mos
./openmodelica/cppruntime/staticLinking/Modelica.Electrical.Analog.Examples.CauerLowPassSC_cpp_static.mos
./openmodelica/cppruntime/tearnonlin1.mos
./openmodelica/cppruntime/umfpack/Modelica.Electrical.Analog.Examples.CauerLowPassSC.mos

comment:8 Changed 8 years ago by r.trevor.clark@…

I noticed when building the test that this warning comes up up when compiling the /openmodelica/cppruntime tests. Which may be related to why the tests fail?

warning: -jN forced in submake: disabling jobserver mode.

Any ideas on that?

comment:9 Changed 8 years ago by sjoelund.se

Usually on Linux we run cd testsuite/partest and ./runtests.pl

It's possible that running the makefiles in parallel is a problem, but I doubt so.

You can see what the error is by doing:

cd ./openmodelica/cppruntime
../../rtest solveTest.mos

comment:10 Changed 8 years ago by Trevor Clark <r.trevor.clark@…>

I tried to compile on Ubuntu 15.10 for comparison and the exact same tests failed. So I think I am missing something.

I was wondering if you have a script for when you compile and a list of package names that you use to compile on ubuntu so that I can compare and see if I am missing anything?

comment:11 Changed 8 years ago by sjoelund.se

You could do:

sudo apt-get build-dep openmodelica
sudo apt-get install libsundials-kinsol1 libqtwebkit-dev # Might be needed depending on platform
apt-get -b source openmodelica

The Hudson job builds using:

cd OpenModelica-clang

if test ! -z "$REVISION"; then
  git checkout master || exit 1
  test `git rev-parse HEAD` = "$REVISION" || exit 1
  git reset --hard || exit 1
else
  git reset --hard origin/master && git checkout master && git pull && git submodule update --init --force --recursive && git fetch --tags || exit 1
fi

# Do not remove the svn and git directories in the libraries directory
git submodule foreach --recursive  "git fetch --tags && git clean -fdxq -e /git -e /svn" || exit 1
git clean -fdxq || exit 1
git submodule foreach --recursive "git describe --dirty --always"
git describe --dirty --always --match "v*.*" || exit 1

autoconf
NPROC=`nproc`
./configure --with-omniORB --enable-modelica3d CC=clang CXX=clang++ OMPCC="gcc-4.8 -fopenmp" CFLAGS='-O2 -march=native' --without-omc --with-cppruntime --with-omniORB

time make -j$NPROC

Changed 8 years ago by r.trevor.clark@…

fail log

comment:12 Changed 8 years ago by r.trevor.clark@…

So I installed the dependencies on a clean install of ubuntu 15.10 using:

sudo apt-get build-dep openmodelica

when running the make file i found that I needed flex and the options provided above use OMPCC="gcc-4.8 -fopenmp" so I also installed the following deps

sudo apt-get install gcc-4.8 libgcc-4.8-dev flex

Then download the source from git-hub

git clone --recursive https://github.com/OpenModelica/OpenModelica.git

cd OpenModelica

autoconf

configured using the following options:

./configure --with-omniORB --enable-modelica3d CC=clang CXX=clang++ OMPCC="gcc-4.8 -fopenmp" CFLAGS='-O2 -march=native' --without-omc --with-cppruntime --with-omniORB

then ran the make command:

make -j8

then ran the testsuite

(cd testsuite/partest && ./runtests.pl)

and again the cppruntime tests failed.

I uploaded one of the fail logs.

I am kind of at a loss. I don't want to take up too much more of your time, but if you see anything I am obviously missing let me know.

comment:13 Changed 8 years ago by sjoelund.se

Ah, this one I think I know what the problem is. You use CXX=g++ in that log for compiling the simulation, and g++ uses a new std::string type in 15.10... So you get boost problems since the cppruntime developers did not update everything correctly.

You could just ignore it and skip the cppruntime :)

comment:14 Changed 8 years ago by Trevor Clark <r.trevor.clark@…>

Should I compile it without the --with-cppruntime flag? or just leave it as is and know that the cppruntime options don't work?

comment:15 Changed 8 years ago by r.trevor.clark@…

Looks like that was the same problem I had in fedora 23. Thanks for all you help. I really appreciate it.

comment:16 Changed 6 years ago by casella

  • Resolution set to fixed
  • Status changed from new to closed

Fedora 25 has been officially supported for several months now. RPM packages are available, see https://openmodelica.org/download/download-linux

comment:17 Changed 6 years ago by sjoelund.se

  • Component changed from *unknown* to Installation program
  • Milestone changed from Future to 1.12.0
Note: See TracTickets for help on using tickets.