From 6c3b95545a2ea6a75d51023f875406820e82fe3b Mon Sep 17 00:00:00 2001 From: Silvio Traversaro Date: Tue, 4 Nov 2025 10:03:03 +0100 Subject: [PATCH 1/2] Ensure symbols are correctly exported on Windows --- CMakeLists.txt | 3 +-- include/eiquadprog/eiquadprog-fast.hpp | 3 ++- include/eiquadprog/eiquadprog.hpp | 9 +++++---- tests/CMakeLists.txt | 4 ++++ 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f176ffa..da17afa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -104,8 +104,7 @@ target_include_directories( ${PROJECT_NAME} INTERFACE $) install( TARGETS ${PROJECT_NAME} - EXPORT ${TARGETS_EXPORT_NAME} - DESTINATION lib) + EXPORT ${TARGETS_EXPORT_NAME}) if(BUILD_TESTING) add_subdirectory(tests) diff --git a/include/eiquadprog/eiquadprog-fast.hpp b/include/eiquadprog/eiquadprog-fast.hpp index df6d3a3..553321b 100644 --- a/include/eiquadprog/eiquadprog-fast.hpp +++ b/include/eiquadprog/eiquadprog-fast.hpp @@ -58,6 +58,7 @@ #define DEFAULT_MAX_ITER 1000 +#include "eiquadprog/config.hpp" #include "eiquadprog/eiquadprog-utils.hxx" namespace eiquadprog { @@ -75,7 +76,7 @@ enum EiquadprogFast_status { EIQUADPROG_FAST_REDUNDANT_EQUALITIES = 4 }; -class EiquadprogFast { +class EIQUADPROG_DLLAPI EiquadprogFast { typedef Eigen::MatrixXd MatrixXd; typedef Eigen::VectorXd VectorXd; typedef Eigen::VectorXi VectorXi; diff --git a/include/eiquadprog/eiquadprog.hpp b/include/eiquadprog/eiquadprog.hpp index 8753692..20488bc 100644 --- a/include/eiquadprog/eiquadprog.hpp +++ b/include/eiquadprog/eiquadprog.hpp @@ -77,6 +77,7 @@ #include #include +#include "eiquadprog/config.hpp" #include "eiquadprog/deprecated.hpp" #include "eiquadprog/eiquadprog-utils.hxx" @@ -107,13 +108,13 @@ void delete_constraint(Eigen::MatrixXd& R, Eigen::MatrixXd& J, Eigen::VectorXi& A, Eigen::VectorXd& u, size_t p, size_t& iq, size_t l); -double solve_quadprog(Eigen::LLT& chol, +EIQUADPROG_DLLAPI double solve_quadprog(Eigen::LLT& chol, double c1, Eigen::VectorXd& g0, const Eigen::MatrixXd& CE, const Eigen::VectorXd& ce0, const Eigen::MatrixXd& CI, const Eigen::VectorXd& ci0, Eigen::VectorXd& x, Eigen::VectorXi& A, size_t& q); -double solve_quadprog(Eigen::LLT& chol, +EIQUADPROG_DLLAPI double solve_quadprog(Eigen::LLT& chol, double c1, Eigen::VectorXd& g0, const Eigen::MatrixXd& CE, const Eigen::VectorXd& ce0, const Eigen::MatrixXd& CI, const Eigen::VectorXd& ci0, Eigen::VectorXd& x, @@ -131,13 +132,13 @@ inline double solve_quadprog2(Eigen::LLT& chol, } /* solve_quadprog is used for on-demand QP solving */ -double solve_quadprog(Eigen::MatrixXd& G, Eigen::VectorXd& g0, +EIQUADPROG_DLLAPI double solve_quadprog(Eigen::MatrixXd& G, Eigen::VectorXd& g0, const Eigen::MatrixXd& CE, const Eigen::VectorXd& ce0, const Eigen::MatrixXd& CI, const Eigen::VectorXd& ci0, Eigen::VectorXd& x, Eigen::VectorXi& activeSet, size_t& activeSetSize); -double solve_quadprog(Eigen::MatrixXd& G, Eigen::VectorXd& g0, +EIQUADPROG_DLLAPI double solve_quadprog(Eigen::MatrixXd& G, Eigen::VectorXd& g0, const Eigen::MatrixXd& CE, const Eigen::VectorXd& ce0, const Eigen::MatrixXd& CI, const Eigen::VectorXd& ci0, Eigen::VectorXd& x, Eigen::VectorXd& y, diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9462063..f8fb075 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -31,6 +31,10 @@ foreach(test ${TESTS}) endforeach(test ${TESTS}) add_library(testab SHARED TestA.cpp TestB.cpp) +# testab is just a test shared library, so on Windows we export the symbols +# with WINDOWS_EXPORT_ALL_SYMBOLS +set_target_properties(testab PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) + target_link_libraries(testab ${PROJECT_NAME}) target_link_libraries(test-integration testab) if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") From e8c4cac646e2b1ac023b7ca066055a9e15f794ec Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 09:11:52 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- CMakeLists.txt | 4 +-- include/eiquadprog/eiquadprog.hpp | 44 +++++++++++++++---------------- tests/CMakeLists.txt | 4 +-- 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index da17afa..d770785 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -102,9 +102,7 @@ modernize_target_link_libraries( ${EIGEN3_INCLUDE_DIR}) target_include_directories( ${PROJECT_NAME} INTERFACE $) -install( - TARGETS ${PROJECT_NAME} - EXPORT ${TARGETS_EXPORT_NAME}) +install(TARGETS ${PROJECT_NAME} EXPORT ${TARGETS_EXPORT_NAME}) if(BUILD_TESTING) add_subdirectory(tests) diff --git a/include/eiquadprog/eiquadprog.hpp b/include/eiquadprog/eiquadprog.hpp index 20488bc..dae134e 100644 --- a/include/eiquadprog/eiquadprog.hpp +++ b/include/eiquadprog/eiquadprog.hpp @@ -108,17 +108,17 @@ void delete_constraint(Eigen::MatrixXd& R, Eigen::MatrixXd& J, Eigen::VectorXi& A, Eigen::VectorXd& u, size_t p, size_t& iq, size_t l); -EIQUADPROG_DLLAPI double solve_quadprog(Eigen::LLT& chol, - double c1, Eigen::VectorXd& g0, const Eigen::MatrixXd& CE, - const Eigen::VectorXd& ce0, const Eigen::MatrixXd& CI, - const Eigen::VectorXd& ci0, Eigen::VectorXd& x, - Eigen::VectorXi& A, size_t& q); - -EIQUADPROG_DLLAPI double solve_quadprog(Eigen::LLT& chol, - double c1, Eigen::VectorXd& g0, const Eigen::MatrixXd& CE, - const Eigen::VectorXd& ce0, const Eigen::MatrixXd& CI, - const Eigen::VectorXd& ci0, Eigen::VectorXd& x, - Eigen::VectorXd& y, Eigen::VectorXi& A, size_t& q); +EIQUADPROG_DLLAPI double solve_quadprog( + Eigen::LLT& chol, double c1, + Eigen::VectorXd& g0, const Eigen::MatrixXd& CE, const Eigen::VectorXd& ce0, + const Eigen::MatrixXd& CI, const Eigen::VectorXd& ci0, Eigen::VectorXd& x, + Eigen::VectorXi& A, size_t& q); + +EIQUADPROG_DLLAPI double solve_quadprog( + Eigen::LLT& chol, double c1, + Eigen::VectorXd& g0, const Eigen::MatrixXd& CE, const Eigen::VectorXd& ce0, + const Eigen::MatrixXd& CI, const Eigen::VectorXd& ci0, Eigen::VectorXd& x, + Eigen::VectorXd& y, Eigen::VectorXi& A, size_t& q); EIQUADPROG_DEPRECATED inline double solve_quadprog2(Eigen::LLT& chol, @@ -132,17 +132,17 @@ inline double solve_quadprog2(Eigen::LLT& chol, } /* solve_quadprog is used for on-demand QP solving */ -EIQUADPROG_DLLAPI double solve_quadprog(Eigen::MatrixXd& G, Eigen::VectorXd& g0, - const Eigen::MatrixXd& CE, const Eigen::VectorXd& ce0, - const Eigen::MatrixXd& CI, const Eigen::VectorXd& ci0, - Eigen::VectorXd& x, Eigen::VectorXi& activeSet, - size_t& activeSetSize); - -EIQUADPROG_DLLAPI double solve_quadprog(Eigen::MatrixXd& G, Eigen::VectorXd& g0, - const Eigen::MatrixXd& CE, const Eigen::VectorXd& ce0, - const Eigen::MatrixXd& CI, const Eigen::VectorXd& ci0, - Eigen::VectorXd& x, Eigen::VectorXd& y, - Eigen::VectorXi& activeSet, size_t& activeSetSize); +EIQUADPROG_DLLAPI double solve_quadprog( + Eigen::MatrixXd& G, Eigen::VectorXd& g0, const Eigen::MatrixXd& CE, + const Eigen::VectorXd& ce0, const Eigen::MatrixXd& CI, + const Eigen::VectorXd& ci0, Eigen::VectorXd& x, Eigen::VectorXi& activeSet, + size_t& activeSetSize); + +EIQUADPROG_DLLAPI double solve_quadprog( + Eigen::MatrixXd& G, Eigen::VectorXd& g0, const Eigen::MatrixXd& CE, + const Eigen::VectorXd& ce0, const Eigen::MatrixXd& CI, + const Eigen::VectorXd& ci0, Eigen::VectorXd& x, Eigen::VectorXd& y, + Eigen::VectorXi& activeSet, size_t& activeSetSize); // } } // namespace solvers diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index f8fb075..0f79e62 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -31,8 +31,8 @@ foreach(test ${TESTS}) endforeach(test ${TESTS}) add_library(testab SHARED TestA.cpp TestB.cpp) -# testab is just a test shared library, so on Windows we export the symbols -# with WINDOWS_EXPORT_ALL_SYMBOLS +# testab is just a test shared library, so on Windows we export the symbols with +# WINDOWS_EXPORT_ALL_SYMBOLS set_target_properties(testab PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) target_link_libraries(testab ${PROJECT_NAME})