构建osqp-eigen库遇LNK2019错误,解决方案:更换OSQP至0.6.3版本
构建osqp-eigen库时的链接错误及解决方法
问题背景
我在C++环境中构建和安装osqp-eigen库,目标是实现类似MATLAB quadprog() 的二次规划功能,但构建时遇到Eigen配置、64位整数编译的OSQP路径相关问题。
CMake构建成功日志
克隆库后,我创建build文件夹并在命令行运行 cmake ..,构建成功:
-- Building for: Visual Studio 17 2022 -- Selecting Windows SDK version 10.0.22621.0 to target Windows 10.0.19045. -- The C compiler identification is MSVC 19.37.32822.0 -- The CXX compiler identification is MSVC 19.37.32822.0 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.37.32822/bin/Hostx64/x64/cl.exe - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.37.32822/bin/Hostx64/x64/cl.exe - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Configuring done (9.9s) -- Generating done (0.1s) -- Build files have been written to: C:/osqp/osqp-Eigen/build
Visual Studio构建错误日志
打开OSqp-eigen.sln在Visual Studio中构建时,出现以下链接错误:
Build started... 1>------ Build started: Project: ZERO_CHECK, Configuration: Debug x64 ------ 1>1>Checking Build System 2>------ Build started: Project: OsqpEigen, Configuration: Debug x64 ------ 2>Building Custom Rule C:/osqp/osqp-Eigen/CMakeLists.txt 2>Data.cpp 2>Settings.cpp 2>Solver.cpp 2>Debug.cpp 2>Generating Code... 2>Auto build dll exports 2> Creating library C:/osqp/osqp-Eigen/build/Debug/OsqpEigend.lib and object C:/osqp/osqp-Eigen/build/Debug/OsqpEigend.exp 2>Data.obj : error LNK2019: unresolved external symbol csc_spfree referenced in function "public: void __cdecl OsqpEigen::Data::clearHessianMatrix(void)" (?clearHessianMatrix@Data@OsqpEigen@@QEAAXXZ) 2>Solver.obj : error LNK2019: unresolved external symbol csc_spalloc referenced in function "bool __cdecl OsqpEigen::SparseMatrixHelper::createOsqpSparseMatrix<class Eigen::SparseMatrix<double,0,int> >(class Eigen::SparseCompressedBase<class Eigen::SparseMatrix<double,0,int> > const &,struct OSQPCscMatrix * &)" (??$createOsqpSparseMatrix@V?$SparseMatrix@N$0A@H@Eigen@@@SparseMatrixHelper@OsqpEigen@@YA_NAEBV?$SparseCompressedBase@V?$SparseMatrix@N$0A@H@Eigen@@@Eigen@@AEAPEAUOSQPCscMatrix@@@Z) 2>C:\osqp\osqp-Eigen\build\Debug\OsqpEigend.dll : fatal error LNK1120: 2 unresolved externals 2>Done building project "OsqpEigen.vcxproj" -- FAILED. 3>------ Build started: Project: ALL_BUILD, Configuration: Debug x64 ------ 3>Building Custom Rule C:/osqp/osqp-Eigen/CMakeLists.txt ========== Build: 2 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== ========== Build started at 10:49 ق.ظ and took 08.958 seconds ==========
解决方法
查阅OSQP的公开issue未找到有效方案,后续在osqp-eigen的issue中找到解决办法:必须使用OSQP最新发布版本0.6.3。
内容的提问来源于stack exchange,提问作者Bahareh
相关产品推荐
相关产品推荐

