esa / pagmo2

A C++ platform to perform parallel computations of optimisation tasks (global and local) via the asynchronous generalized island model.
https://esa.github.io/pagmo2/
GNU General Public License v3.0
804 stars 159 forks source link

[BUG] Compilation problem with IPOPT #555

Closed alicebain closed 10 months ago

alicebain commented 10 months ago

Describe the bug I am trying to compile pagmo2 (2.19.0) using IPOPT. I get the error:

[ 78%] Building CXX object CMakeFiles/pagmo.dir/src/r_policies/fair_replace.cpp.o
[ 79%] Building CXX object CMakeFiles/pagmo.dir/src/s_policies/select_best.cpp.o
[ 80%] Building CXX object CMakeFiles/pagmo.dir/src/utils/constrained.cpp.o
[ 81%] Building CXX object CMakeFiles/pagmo.dir/src/utils/discrepancy.cpp.o
[ 82%] Building CXX object CMakeFiles/pagmo.dir/src/utils/generic.cpp.o
[ 83%] Building CXX object CMakeFiles/pagmo.dir/src/utils/genetic_operators.cpp.o
[ 84%] Building CXX object CMakeFiles/pagmo.dir/src/utils/multi_objective.cpp.o
[ 86%] Building CXX object CMakeFiles/pagmo.dir/src/utils/hypervolume.cpp.o
[ 87%] Building CXX object CMakeFiles/pagmo.dir/src/utils/hv_algos/hv_algorithm.cpp.o
[ 88%] Building CXX object CMakeFiles/pagmo.dir/src/utils/hv_algos/hv_bf_approx.cpp.o
[ 89%] Building CXX object CMakeFiles/pagmo.dir/src/utils/hv_algos/hv_bf_fpras.cpp.o
[ 90%] Building CXX object CMakeFiles/pagmo.dir/src/utils/hv_algos/hv_hv2d.cpp.o
[ 91%] Building CXX object CMakeFiles/pagmo.dir/src/utils/hv_algos/hv_hv3d.cpp.o
[ 92%] Building CXX object CMakeFiles/pagmo.dir/src/utils/hv_algos/hv_hvwfg.cpp.o
[ 93%] Building CXX object CMakeFiles/pagmo.dir/src/detail/base_sr_policy.cpp.o
[ 94%] Building CXX object CMakeFiles/pagmo.dir/src/detail/bfe_impl.cpp.o
[ 95%] Building CXX object CMakeFiles/pagmo.dir/src/detail/task_queue.cpp.o
[ 96%] Building CXX object CMakeFiles/pagmo.dir/src/detail/prime_numbers.cpp.o
[ 97%] Building CXX object CMakeFiles/pagmo.dir/src/detail/gte_getter.cpp.o
[ 98%] Building CXX object CMakeFiles/pagmo.dir/src/detail/type_name.cpp.o
[100%] Linking CXX shared library libpagmo.so
/usr/bin/ld: cannot find /home/xx/optimizer/c++/ipopt/lib: file format not recognized
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/pagmo.dir/build.make:1453: libpagmo.so.9.0] Error 1
make[1]: *** [CMakeFiles/Makefile2:104: CMakeFiles/pagmo.dir/all] Error 2
make: *** [Makefile:141: all] Error 2

To Reproduce

cmake ../ -DCMAKE_INSTALL_PREFIX=/home/xx/optimizer/c++/pagmo2 -DPAGMO_WITH_NLOPT=ON -DPAGMO_WITH_IPOPT=ON -DPAGMO_WITH_EIGEN3=ON -DNLopt_DIR=/home/xx/optimizer/c++/nlopt/lib/cmake/nlopt -DPAGMO_IPOPT_LIBRARY=/home/xx/optimizer/c++/ipopt/lib -DPAGMO_IPOPT_INCLUDE_DIR=/home/xx/optimizer/c++/ipopt/include/coin-or

cmake --build . -j 4

Expected behavior Complete compilation.

Environment (please complete the following information):

Additional context My IPOPT installation is working and is compiled with the same compiler version.

Thanks

alicebain commented 10 months ago

Can anyone please have a look? This is crucial for my project. Thanks!!

bluescarni commented 10 months ago

@alicebain could you please paste the full output of cmake?

From the look of it, it seems like the linker is trying to link the ipopt build directory /home/xx/optimizer/c++/ipopt/lib rather than the library (which should be called something like libipopt.so or similar).

Any specific reason why you are compiling from source rather than using the conda packages?

alicebain commented 10 months ago

Sorry, this is the full cmake output. Unfortunately, I don't have conda. I'm running this on Ubuntu 20.04.

-- System name: Linux
-- The fork_island UDI will be available.
-- The C++ compiler ID is: GNU
-- YACMA autodetected C++ flags: -fdiagnostics-color=auto;-ftemplate-depth=1024;-fdiagnostics-show-template-tree;-Wno-attributes
-- YACMA autodetected C++ debug flags: -Waddress-of-packed-member;-Wall;-Wextra;-Wnon-virtual-dtor;-Wlogical-op;-Wconversion;-Wdeprecated;-Wold-style-cast;-Wdisabled-optimization;-ftemplate-backtrace-limit=0;-fstack-protector-all;-Wodr;-Wsuggest-final-types;-Wsuggest-final-methods;-Wsuggest-override;-Wshift-negative-value;-Wshift-overflow=2;-Wduplicated-cond;-Wnull-dereference;-Wrestrict;-Waligned-new;-Wcast-align=strict;-Wno-maybe-uninitialized;-Wmismatched-tags;-Wredundant-tags
-- Thread library: -pthread
-- POSIX threads detected.
-- POSIX threads affinity extensions detected.
-- The 'thread_local' keyword is supported.
-- Library installation directory: lib
-- TBB found using config mode.
-- Requested IPOPT components: header;libipopt
-- Creating the 'pagmo::IPOPT::header' imported target.
-- Path to the ipopt headers: ./optimizer/c++/ipopt/include/coin-or
-- Creating the 'pagmo::IPOPT::libipopt' imported target.
-- Path to libipopt: ./optimizer/c++/ipopt/lib
-- Required Boost libraries: serialization
-- Detected Boost version: 1.71.0
-- Boost include dirs: /usr/include
-- Configuring done
-- Generating done
-- Build files have been written to: ./pagmo2-2.19.0/build
Scanning dependencies of target pagmo
[  1%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/cmaes.cpp.o
[  2%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/ipopt.cpp.o
[  3%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/xnes.cpp.o
[  4%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/nlopt.cpp.o
[  5%] Building CXX object CMakeFiles/pagmo.dir/src/islands/fork_island.cpp.o
[  6%] Building CXX object CMakeFiles/pagmo.dir/src/algorithm.cpp.o
[  7%] Building CXX object CMakeFiles/pagmo.dir/src/population.cpp.o
[  8%] Building CXX object CMakeFiles/pagmo.dir/src/problem.cpp.o
[  9%] Building CXX object CMakeFiles/pagmo.dir/src/bfe.cpp.o
[ 10%] Building CXX object CMakeFiles/pagmo.dir/src/island.cpp.o
[ 11%] Building CXX object CMakeFiles/pagmo.dir/src/archipelago.cpp.o
[ 12%] Building CXX object CMakeFiles/pagmo.dir/src/io.cpp.o
[ 13%] Building CXX object CMakeFiles/pagmo.dir/src/rng.cpp.o
[ 15%] Building CXX object CMakeFiles/pagmo.dir/src/threading.cpp.o
[ 16%] Building CXX object CMakeFiles/pagmo.dir/src/topology.cpp.o
[ 17%] Building CXX object CMakeFiles/pagmo.dir/src/r_policy.cpp.o
[ 18%] Building CXX object CMakeFiles/pagmo.dir/src/s_policy.cpp.o
[ 19%] Building CXX object CMakeFiles/pagmo.dir/src/problems/null_problem.cpp.o
[ 20%] Building CXX object CMakeFiles/pagmo.dir/src/problems/cec2006.cpp.o
[ 21%] Building CXX object CMakeFiles/pagmo.dir/src/problems/cec2009.cpp.o
[ 22%] Building CXX object CMakeFiles/pagmo.dir/src/problems/schwefel.cpp.o
[ 23%] Building CXX object CMakeFiles/pagmo.dir/src/problems/rosenbrock.cpp.o
[ 24%] Building CXX object CMakeFiles/pagmo.dir/src/problems/hock_schittkowski_71.cpp.o
[ 25%] Building CXX object CMakeFiles/pagmo.dir/src/problems/inventory.cpp.o
[ 26%] Building CXX object CMakeFiles/pagmo.dir/src/problems/zdt.cpp.o
[ 27%] Building CXX object CMakeFiles/pagmo.dir/src/problems/dtlz.cpp.o
[ 29%] Building CXX object CMakeFiles/pagmo.dir/src/problems/unconstrain.cpp.o
[ 30%] Building CXX object CMakeFiles/pagmo.dir/src/problems/translate.cpp.o
[ 31%] Building CXX object CMakeFiles/pagmo.dir/src/problems/decompose.cpp.o
[ 32%] Building CXX object CMakeFiles/pagmo.dir/src/problems/golomb_ruler.cpp.o
[ 33%] Building CXX object CMakeFiles/pagmo.dir/src/problems/lennard_jones.cpp.o
[ 34%] Building CXX object CMakeFiles/pagmo.dir/src/problems/ackley.cpp.o
[ 35%] Building CXX object CMakeFiles/pagmo.dir/src/problems/griewank.cpp.o
[ 36%] Building CXX object CMakeFiles/pagmo.dir/src/problems/rastrigin.cpp.o
[ 37%] Building CXX object CMakeFiles/pagmo.dir/src/problems/minlp_rastrigin.cpp.o
[ 38%] Building CXX object CMakeFiles/pagmo.dir/src/problems/luksan_vlcek1.cpp.o
[ 39%] Building CXX object CMakeFiles/pagmo.dir/src/problems/wfg.cpp.o
[ 40%] Building CXX object CMakeFiles/pagmo.dir/src/problems/cec2013.cpp.o
[ 41%] Building CXX object CMakeFiles/pagmo.dir/src/problems/cec2013_data.cpp.o
[ 43%] Building CXX object CMakeFiles/pagmo.dir/src/problems/cec2014.cpp.o
[ 44%] Building CXX object CMakeFiles/pagmo.dir/src/problems/cec2014_data.cpp.o
[ 45%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/null_algorithm.cpp.o
[ 46%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/de.cpp.o
[ 47%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/pso.cpp.o
[ 48%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/not_population_based.cpp.o
[ 49%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/compass_search.cpp.o
[ 50%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/mbh.cpp.o
[ 51%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/cstrs_self_adaptive.cpp.o
[ 52%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/pso_gen.cpp.o
[ 53%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/ihs.cpp.o
[ 54%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/sade.cpp.o
[ 55%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/bee_colony.cpp.o
[ 56%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/sea.cpp.o
[ 58%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/sga.cpp.o
[ 59%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/simulated_annealing.cpp.o
[ 60%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/moead.cpp.o
[ 61%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/moead_gen.cpp.o
[ 62%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/nsga2.cpp.o
[ 63%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/gaco.cpp.o
[ 64%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/de1220.cpp.o
[ 65%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/gwo.cpp.o
[ 66%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/maco.cpp.o
[ 67%] Building CXX object CMakeFiles/pagmo.dir/src/algorithms/nspso.cpp.o
[ 68%] Building CXX object CMakeFiles/pagmo.dir/src/islands/thread_island.cpp.o
[ 69%] Building CXX object CMakeFiles/pagmo.dir/src/batch_evaluators/default_bfe.cpp.o
[ 70%] Building CXX object CMakeFiles/pagmo.dir/src/batch_evaluators/member_bfe.cpp.o
[ 72%] Building CXX object CMakeFiles/pagmo.dir/src/batch_evaluators/thread_bfe.cpp.o
[ 73%] Building CXX object CMakeFiles/pagmo.dir/src/topologies/base_bgl_topology.cpp.o
[ 74%] Building CXX object CMakeFiles/pagmo.dir/src/topologies/unconnected.cpp.o
[ 75%] Building CXX object CMakeFiles/pagmo.dir/src/topologies/fully_connected.cpp.o
[ 76%] Building CXX object CMakeFiles/pagmo.dir/src/topologies/ring.cpp.o
[ 77%] Building CXX object CMakeFiles/pagmo.dir/src/topologies/free_form.cpp.o
[ 78%] Building CXX object CMakeFiles/pagmo.dir/src/r_policies/fair_replace.cpp.o
[ 79%] Building CXX object CMakeFiles/pagmo.dir/src/s_policies/select_best.cpp.o
[ 80%] Building CXX object CMakeFiles/pagmo.dir/src/utils/constrained.cpp.o
[ 81%] Building CXX object CMakeFiles/pagmo.dir/src/utils/discrepancy.cpp.o
[ 82%] Building CXX object CMakeFiles/pagmo.dir/src/utils/generic.cpp.o
[ 83%] Building CXX object CMakeFiles/pagmo.dir/src/utils/genetic_operators.cpp.o
[ 84%] Building CXX object CMakeFiles/pagmo.dir/src/utils/multi_objective.cpp.o
[ 86%] Building CXX object CMakeFiles/pagmo.dir/src/utils/hypervolume.cpp.o
[ 87%] Building CXX object CMakeFiles/pagmo.dir/src/utils/hv_algos/hv_algorithm.cpp.o
[ 88%] Building CXX object CMakeFiles/pagmo.dir/src/utils/hv_algos/hv_bf_approx.cpp.o
[ 89%] Building CXX object CMakeFiles/pagmo.dir/src/utils/hv_algos/hv_bf_fpras.cpp.o
[ 90%] Building CXX object CMakeFiles/pagmo.dir/src/utils/hv_algos/hv_hv3d.cpp.o
[ 91%] Building CXX object CMakeFiles/pagmo.dir/src/utils/hv_algos/hv_hv2d.cpp.o
[ 92%] Building CXX object CMakeFiles/pagmo.dir/src/utils/hv_algos/hv_hvwfg.cpp.o
[ 93%] Building CXX object CMakeFiles/pagmo.dir/src/detail/base_sr_policy.cpp.o
[ 94%] Building CXX object CMakeFiles/pagmo.dir/src/detail/bfe_impl.cpp.o
[ 95%] Building CXX object CMakeFiles/pagmo.dir/src/detail/task_queue.cpp.o
[ 96%] Building CXX object CMakeFiles/pagmo.dir/src/detail/prime_numbers.cpp.o
[ 97%] Building CXX object CMakeFiles/pagmo.dir/src/detail/gte_getter.cpp.o
[ 98%] Building CXX object CMakeFiles/pagmo.dir/src/detail/type_name.cpp.o
[100%] Linking CXX shared library libpagmo.so
/usr/bin/ld: cannot find ./optimizer/c++/ipopt/lib: file format not recognized
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/pagmo.dir/build.make:1453: libpagmo.so.9.0] Error 1
make[1]: *** [CMakeFiles/Makefile2:104: CMakeFiles/pagmo.dir/all] Error 2
make: *** [Makefile:141: all] Error 2
[  1%] Linking CXX shared library libpagmo.so
/usr/bin/ld: cannot find ./optimizer/c++/ipopt/lib: file format not recognized
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/pagmo.dir/build.make:1453: libpagmo.so.9.0] Error 1
make[1]: *** [CMakeFiles/Makefile2:104: CMakeFiles/pagmo.dir/all] Error 2
make: *** [Makefile:141: all] Error 2
bluescarni commented 10 months ago

@alicebain

The cmake output here:

-- Path to libipopt: ./optimizer/c++/ipopt/lib

seems to indicate that the path to the IPOPT library points to a directory, rather than a file. It would be helpful to know:

1) is there a file named libipopt.so or similar within the ./optimizer/c++/ipopt/lib directory, and 2) how did you invoke CMake - specifically, did you pass any option to the cmake invocation to indicate to the pagmo build system where the IPOPT library is located?

alicebain commented 10 months ago

I'm running:

cmake ../ -DCMAKE_INSTALL_PREFIX=./optimizer/c++/pagmo2 -DPAGMO_WITH_NLOPT=ON -DPAGMO_WITH_IPOPT=ON -DPAGMO_WITH_EIGEN3=ON -DNLopt_DIR=./optimizer/c++/nlopt/lib/cmake/nlopt -DPAGMO_IPOPT_LIBRARY=./optimizer/c++/ipopt/lib -DPAGMO_IPOPT_INCLUDE_DIR=./optimizer/c++/ipopt/include/coin-or
cmake --build . -j 4

This is the contents of the directory ./optimizer/c++/ipopt/lib:

./optimizer/c++/ipopt/lib$ ls
libcoinhsl.la        libcoinmetis.so.2.0.0  libipopt.so.3
libcoinhsl.so        libcoinmumps.la        libipopt.so.3.14.12
libcoinhsl.so.2      libcoinmumps.so        libsipopt.la
libcoinhsl.so.2.2.1  libcoinmumps.so.2      libsipopt.so
libcoinmetis.la      libcoinmumps.so.2.0.0  libsipopt.so.3
libcoinmetis.so      libipopt.la            libsipopt.so.3.14.12
libcoinmetis.so.2    libipopt.so            pkgconfig

So, it looks like the library exists.

bluescarni commented 10 months ago

@alicebain the problem is in the cmake invocation:

-DPAGMO_IPOPT_LIBRARY=./optimizer/c++/ipopt/lib

This should be instead:

-DPAGMO_IPOPT_LIBRARY=./optimizer/c++/ipopt/lib/libipopt.so
alicebain commented 10 months ago

It worked! Thanks so much! I did not know that you need to specify the path to the file, I'm used to passing the folder. Thanks again!