Closed benEnsta closed 4 years ago
Merci Benoit. Cyril, OK pour toi?
Je vais regarder plus en détails mais je ne pense pas que ce soit comme cela qu'il faille faire. En faisant les changements proposés, les flags '-fPIC' seront présent tout le temps même lorsqu'on compile la librairie en statique, ce qui peut introduire des lenteurs.
@benEnsta Qu'est ce que tu veux faire ? Tu as besoin d'une version 'shared lib' d'Ibex ? Pour cela tu peux commencer par ajouter -DBUILD_SHARED_LIBS=1
lorsque tu exécutes cmake. Cela devrait forcer CMake à utiliser le flag '-fPIC'. Par contre pour l'instant l'information n'est pas propagée jusqu'au bibliothèques comme Gaol, Filib, Soplex, ... donc ça ne devrait pas résoudre complètement le probème. Je vais regarder cela.
Je vais vérifier si j'ai absolument besoin d'une version static d'ibex avec l'option -fPIC
Pour l'instant, le module python pyibex.so est autonome car lié statiquement à libibex.a, à voir si je peux faire la même chose à partir du libibex.so.
J'ai essayer avec l'option -DBUILD_SHARED_LIBS=1 mais j'ai l'erreur suivante:
[ 98%] Building CXX object src/CMakeFiles/ibex.dir/parser/lexer.lex.cc.o
[ 98%] Building CXX object src/CMakeFiles/ibex.dir/parser/parser.tab.cc.o
[ 98%] Linking CXX shared library libibex.so
[ 98%] Built target ibex
Scanning dependencies of target ibexsolve
[100%] Building CXX object src/bin/CMakeFiles/ibexsolve.dir/ibexsolve.cpp.o
[100%] Linking CXX executable ../../bin/ibexsolve
/usr/bin/ld: ../libibex.so: undefined reference to `gaol::NaN_val()'
collect2: error: ld returned 1 exit status
[100%] Linking CXX executable ../../bin/ibexsolve
/usr/bin/ld: ../libibex.so: undefined reference to `gaol::NaN_val()'
collect2: error: ld returned 1 exit status
[100%] Linking CXX executable ../../bin/ibexsolve
/usr/bin/ld: ../libibex.so: undefined reference to `gaol::NaN_val()'
collect2: error: ld returned 1 exit status
Une idée ?
J'ai la même erreur, je suis en train de debugger ça. L'erreur est lié à des lignes qui sont patchées par Ibex dans Gaol, donc j'essaie de comprendre ce qu'il se passe et pourquoi Ibex patche ces lignes là.
Edit: tu peux commenter la ligne add_subdirectory(bin)
dans src/CMakeLists.txt
pour tes tests pendant que je débugge ce problème. Tu ne dois pas avoir besoin de ibexsolve pour pyibex.
J'ai essayé et j'ai l'impression qu'il me faut bien une archive compilée avec l'option fPIC pour pourvoir être incluse dans une librairie dynamique. Lors de la phase d'édition des liens avec target_link_libraries, j'ai l'erreur suivante:
make[2]: *** No rule to make target '/lib/ibex/3rd/libgaol.so', needed by 'src/core/pyibex.cpython-37m-x86_64-linux-gnu.so'
Il existe peut être une option que je n'ai pas trouvée, si ça existe je suis preneur.
Tu peux aussi essayer en passer -fPIC
d'une des deux façons suivantes:
cmake (autres args) -DCMAKE_CXX_FLAGS="-fPIC" ..
CXXFLAGS="-fPIC" cmake (autres args) ..
La deuxième méthode ne marchera pas sous Windows mais la première est complétement portable.
J'ai essayé, cela marche bien pour ibex mais malheureusement l'option n'est pas prise en compte pour compiler gaol et mathlib. Par contre, en ajoutant les modification du fichier interval_lib_wrapper/gaol/CMakeLists.txt ça marche.
Si cela te convient comme solution, moi ça me va.
Par contre il faut les CXX et C flags.
cmake (autres args) -DCMAKE_CXX_FLAGS="-fPIC" -DCMAKE_C_FLAGS="-fPIC" ..
J'ai pushé les changements dans la branche develop. Est-ce que tu peux tester si ça marche pour toi. Si oui, tu peux fermer cette PR.
C'est bon ! Merci
J'ai tenté dans ce commit d'appliquer -fPIC également à soplex le cas échéant
J'ai tenté dans ce commit d'appliquer -fPIC également à soplex le cas échéant
D'après la ligne 328 du Makefile de Soplex:
CXXFLAGS += $(USRCXXFLAGS)
je pense qu'il faut passer les flags C++ via USRCXXFLAGS
et non CXXFLAGS
OK, merci, ça marche effectivement et c'est plus propre ainsi. J'ai fait la modif.
ajout de l'option fPIC pour pouvoir compiler les binding python avec pybind11