Openmvg: Troubles using ceres on Windows 7 using Visual Studio 2015

Created on 7 Jul 2017  ·  20Comments  ·  Source: openMVG/openMVG

Hey there,

I've got some troubles compiling openMVG 1.1 with ceres on Windows 7 with Visual Studio 2015. Here is what I did:

  • build gflags 2.2
  • build glog 0.3.5 (with gflags)
  • build cxsparse 2.1
  • build ceres 1.12.0 (with glags/glog/cxsparse)

Now I tried to use the ceres lib for building openMVG 1.1. Here's the cmake output:

Detected: Vendor ID 'GenuineIntel'   CPU Family '6'  CPU Model '60'  CPU Flags  ''
Detected CPU: haswell
Checking for C++11 compiler
Checking for C++11 compiler - unavailable
-- Did not find MOSEK header
-- Did not find MOSEK library
Could not find mosek library on this machine.
Eigen 3.2.8 found (include: C:/Entwicklung/40 Entwicklung/Programmierung/Bibliotheken/Eigen/include/eigen3)
Found required Ceres dependency: Eigen version 3.2.8 in C:/Entwicklung/40 Entwicklung/Programmierung/Bibliotheken/Eigen/include/eigen3
Failed to find installed glog CMake configuration, searching for glog build directories exported with CMake.
No preference for use of exported gflags CMake configuration set, and no hints for include/library directories provided. Defaulting to preferring an installed/exported gflags CMake configuration if available.
Found installed version of gflags: C:/Entwicklung/40 Entwicklung/Programmierung/Bibliotheken_VC14/CERES/gflags/install/lib/cmake/gflags
Detected gflags version: 2.2.0
Found exported glog build directory: C:/Entwicklung/40 Entwicklung/Programmierung/Bibliotheken_VC14/CERES/glog/build-glog
Detected glog version: 0.3.5
Found required Ceres dependency: glog
Failed to find installed gflags CMake configuration, searching for gflags build directories exported with CMake.
Found exported gflags build directory: C:/Entwicklung/40 Entwicklung/Programmierung/Bibliotheken_VC14/CERES/gflags/install/lib/cmake/gflags
Detected gflags version: 2.2.0
Found required Ceres dependency: gflags
Found Ceres version: 1.12.0 installed in: C:/Entwicklung/40 Entwicklung/Programmierung/Bibliotheken_VC14/CERES/ceres-build/install with components: [CXSparse, SparseLinearAlgebraLibrary, SchurSpecializations, OpenMP]
Flann 1.8.4 found (include: C:/Entwicklung/openMVG-1.1/src/third_party/flann/src/cpp/flann)
CoinUtils 2.9.3 found (include: C:/Entwicklung/openMVG-1.1/src/dependencies/osi_clp/CoinUtils/src)
Clp 1.15.11 found (include: C:/Entwicklung/openMVG-1.1/src/dependencies/osi_clp/Clp/src)
Osi 0.106.10 found (include: C:/Entwicklung/openMVG-1.1/src/dependencies/osi_clp/Osi/src/Osi)
Lemon 1.3 found (include: C:/Entwicklung/openMVG-1.1/src/third_party/lemon/lemon)
Could NOT find PythonInterp (missing: PYTHON_EXECUTABLE) 
Could NOT find Wget (missing: WGET_EXECUTABLE) 
Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) 
Could NOT find Ghostscript (missing: GHOSTSCRIPT_EXECUTABLE) 
Could NOT find GLPK (missing: GLPK_LIBRARY GLPK_INCLUDE_DIR GLPK_PROPER_VERSION_FOUND) (Required is at least version "4.33")
Could NOT find ILOG (missing: ILOG_CPLEX_LIBRARY ILOG_CPLEX_INCLUDE_DIR) 
Could NOT find COIN (missing: COIN_INCLUDE_DIR COIN_CBC_LIBRARY COIN_CBC_SOLVER_LIBRARY COIN_CGL_LIBRARY COIN_CLP_LIBRARY COIN_COIN_UTILS_LIBRARY COIN_OSI_LIBRARY COIN_OSI_CBC_LIBRARY COIN_OSI_CLP_LIBRARY) 
Could NOT find SOPLEX (missing: SOPLEX_LIBRARY SOPLEX_INCLUDE_DIR) 

Configured Eigen 3.2.8



** OpenMVG version: 1.1.0
** Build Shared libs: OFF
** Build OpenMVG tests: OFF
** Build OpenMVG documentation: OFF
** Build OpenMVG samples applications: OFF
** Build OpenMVG openGL examples: OFF
** Enable code coverage generation: OFF
** Enable OpenMP parallelization: ON
** Build OpenCV+OpenMVG samples programs: ON
** Use OpenCV SIFT features: ON


EIGEN: 3.2.8 (internal)
CERES: 1.12.0 (external)
FLANN: 1.8.4 (internal)
LIBTIFF:  (internal)
LIBPNG:  (internal)
LIBJPEG (internal)
CLP: 1.15.11 (internal)
COINUTILS: 2.9.3 (internal)
OSI: 0.106.10 (internal)
LEMON: 1.3 (internal)


Configuring done
Generating done

So far so good. Now I try to build openMVG and I come across always the same error. All software modules that use ceres fail to build with the following error (here the output from the openMVG_main_ComputeStructureFromKnownPoses module):

LNK2001 Nicht aufgelöstes externes Symbol ""class std::set<class google::LogSink *,struct std::less<class google::LogSink *>,class std::allocator<class google::LogSink *> > google::log_sinks_global" (?log_sinks_global@google@@3V?$set@PEAVLogSink@google@@U?$less@PEAVLogSink@google@@@std@@V?$allocator@PEAVLogSink@google@@@4@@std@@A)".  openMVG_main_ComputeStructureFromKnownPoses C:\Entwicklung\openMVG-1.1-build\software\SfM\openMVG_sfm.lib(sfm_data_BA_ceres.obj)    1   

I tried building gflags/glog/cxsparse/ceres several times, dynamic, static linking, nothing works. The tests for these libraries work though.

Any ideas on that?

I really appreciate your help!

Regards
mrscho

All 20 comments

Hi @mrscho
Did you try to compile OpenMVG with it's internal ceres dependency. It already includes cxsparse and so you will have the same configuration (expect the ceres logging system that will rely on miniglog)?

  1. I would advise you to use the internal ceres that is tested (compilation, unit test) on various platform
  2. If you want to use external ceres it's possible and must work in the way you have done it.
    I don't know why you have an error since we see that the find_package(Ceres) is locating correctly glog ang gflags...
    Did you try to make another tiny c++ main program with cmake in order to see if you don't have any link error on a empty main?
    Else perhaps you can do that in the cmake in order to force the dependency lookup:
include(CMakeFindDependencyMacro)
find_dependency(Ceres)

Hi @pmoulon,

thanks for your fast response. I was able to build it with your first hint (using internal ceres). Unfortunately all attempts building it with external ceres failed. Seems like sth in the build process of ceres went wrong :/ Anyway, I will try out all the modules.

Regards
mrscho

I have got same problem using ceres 1.13. I am using ceres 1.13 with opencv and sfm modules (VS 2015-Windows 10).
CMAKE output :

Checking for C++11 compiler
Checking for C++11 compiler - available
Eigen 3.3.90 found (include: G:/Lib/eigen)
Found required Ceres dependency: Eigen version 3.3.90 in G:/Lib/eigen
Found installed version of glog: G:/lib/Install/glog/lib/cmake/glog
Detected glog version: 0.3.5
Found required Ceres dependency: glog
Found Ceres version: 1.13.0 installed in: G:/Lib/install/ceres-solver with components: [SchurSpecializations, OpenMP]
Flann 1.8.4 found (include: G:/Lib/openMVG/src/third_party/flann/src/cpp/flann)
CoinUtils 2.10.13 found (include: G:/Lib/openMVG/src/dependencies/osi_clp/CoinUtils/src)
Clp 1.16.10 found (include: G:/Lib/openMVG/src/dependencies/osi_clp/Clp/src)
Osi 0.107.8 found (include: G:/Lib/openMVG/src/dependencies/osi_clp/Osi/src/Osi)
Lemon 1.3 found (include: G:/Lib/openMVG/src/third_party/lemon/lemon)
Could NOT find Wget (missing: WGET_EXECUTABLE) 
Could NOT find Ghostscript (missing: GHOSTSCRIPT_EXECUTABLE) 
Could NOT find GLPK (missing: GLPK_LIBRARY GLPK_INCLUDE_DIR GLPK_PROPER_VERSION_FOUND) (Required is at least version "4.33")
Could NOT find ILOG (missing: ILOG_CPLEX_LIBRARY ILOG_CPLEX_INCLUDE_DIR) 
Could NOT find COIN (missing: COIN_INCLUDE_DIR COIN_CBC_LIBRARY COIN_CBC_SOLVER_LIBRARY COIN_CGL_LIBRARY COIN_CLP_LIBRARY COIN_COIN_UTILS_LIBRARY COIN_OSI_LIBRARY COIN_OSI_CBC_LIBRARY COIN_OSI_CLP_LIBRARY) 
Could NOT find SOPLEX (missing: SOPLEX_LIBRARY SOPLEX_INCLUDE_DIR) 

Configured Eigen 3.3.1

CMake Warning at openMVG_Samples/describe_and_match_GUI/CMakeLists.txt:4 (find_package):
  By not providing "FindQt5Widgets.cmake" in CMAKE_MODULE_PATH this project
  has asked CMake to find a package configuration file provided by
  "Qt5Widgets", but CMake did not find one.

  Could not find a package configuration file provided by "Qt5Widgets" with
  any of the following names:

    Qt5WidgetsConfig.cmake
    qt5widgets-config.cmake

  Add the installation prefix of "Qt5Widgets" to CMAKE_PREFIX_PATH or set
  "Qt5Widgets_DIR" to a directory containing one of the above files.  If
  "Qt5Widgets" provides a separate development package or SDK, be sure it has
  been installed.


CMake Warning at software/VO/AlternativeVO/CMakeLists.txt:6 (find_package):
  By not providing "FindQt5Widgets.cmake" in CMAKE_MODULE_PATH this project
  has asked CMake to find a package configuration file provided by
  "Qt5Widgets", but CMake did not find one.

  Could not find a package configuration file provided by "Qt5Widgets" with
  any of the following names:

    Qt5WidgetsConfig.cmake
    qt5widgets-config.cmake

  Add the installation prefix of "Qt5Widgets" to CMAKE_PREFIX_PATH or set
  "Qt5Widgets_DIR" to a directory containing one of the above files.  If
  "Qt5Widgets" provides a separate development package or SDK, be sure it has
  been installed.


CMake Warning at software/CMakeLists.txt:14 (find_package):
  By not providing "FindQt5.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Qt5", but
  CMake did not find one.

  Could not find a package configuration file provided by "Qt5" with any of
  the following names:

    Qt5Config.cmake
    qt5-config.cmake

  Add the installation prefix of "Qt5" to CMAKE_PREFIX_PATH or set "Qt5_DIR"
  to a directory containing one of the above files.  If "Qt5" provides a
  separate development package or SDK, be sure it has been installed.


** Qt5 not found, GUI modules will not be build
Could NOT find Sphinx (missing: SPHINX_EXECUTABLE) 
Sphinx need to be installed to generate the sphinx documentation


** OpenMVG version: 1.2.0
** Build Shared libs: OFF
** Build OpenMVG tests: OFF
** Build OpenMVG softwares: ON
** Build OpenMVG documentation: ON
** Build OpenMVG samples applications: ON
** Build OpenMVG openGL examples: OFF
** Enable code coverage generation: OFF
** Enable OpenMP parallelization: ON
** Build OpenCV+OpenMVG samples programs: ON
** Use OpenCV SIFT features: OFF

EIGEN: 3.3.90 (internal)
CERES: 1.13.0 (external)
FLANN: 1.8.4 (internal)
LIBTIFF: 4.0.6 (internal)
LIBPNG:  (internal)
LIBJPEG (internal)
CLP: 1.16.10 (internal)
COINUTILS: 2.10.13 (internal)
OSI: 0.107.8 (internal)
LEMON: 1.3 (internal)

In openmvg_multiveiw project include path G:\Lib\install\glog\include is missing (path using my own ceres build).

Adding path solve error. But a new error comes :
re : aucun opérateur trouvé qui accepte un opérande de partie droite de type 'double' (ou il n'existe pas de conversion acceptable)
1> g:\lib\eigen\eigen\src/Core/IndexedView.h(113): note: est peut-être 'Eigen::IndexedView::IvcIndex> &Eigen::IndexedView::IvcIndex>::operator =(const Eigen::IndexedView::IvcIndex> &)'
1> with
1> [
1> Derived=Eigen::Matrix,
1> T=
1> ]
1> g:\lib\eigen\eigen\src/Core/MatrixBase.h(139): note: ou 'Eigen::IndexedView::IvcIndex> &Eigen::MatrixBase::IvcIndex>>::operator =(const Eigen::MatrixBase::IvcIndex>> &)'
1> with
1> [
1> Derived=Eigen::Matrix,
1> T=
1> ]
1> G:\Lib\openMVG\src\openMVG\multiview\solver_essential_five_point.cpp(121): note: lors de la tentative de mise en correspondance de la liste des arguments '(Eigen::IndexedView::IvcIndex>, double)'
1> with
1> [
1> Derived=Eigen::Matrix,
1> T=
1> ]

Can you try to use the internal Ceres library just for a fast check:

Using a external ceres is not a problem on Linux.

Seems like in your case the variable CERES_LIBRARIES is not contening glog for an unknown reason.
Regarding the Eigen problem I don't know, that's why I would advise you to test with the internal library that are working for the continuous integration:
see last build for develop: https://ci.appveyor.com/project/pmoulon/openmvg/build/1.0.600
for master: https://ci.appveyor.com/project/pmoulon/openmvg/build/1.0.569

Thanks for your answer.
Using internal ceres and eigen there is no problem.

To solve glog problem I changed cmakelists :

if (OpenMVG_USE_INTERNAL_CERES)
  set(OpenMVG_INCLUDE_DIRS
  ${CMAKE_CURRENT_SOURCE_DIR}
  ${CMAKE_CURRENT_SOURCE_DIR}/dependencies
  ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/cereal/include
  ${LEMON_INCLUDE_DIRS}
  ${EIGEN_INCLUDE_DIRS}
  ${FLANN_INCLUDE_DIRS}

)
  message ("CERES internal     --> ${OpenMVG_INCLUDE_DIRS}")
else (OpenMVG_USE_INTERNAL_CERES)
  set(OpenMVG_INCLUDE_DIRS
  ${CMAKE_CURRENT_SOURCE_DIR}
  ${CMAKE_CURRENT_SOURCE_DIR}/dependencies
  ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/cereal/include
  ${LEMON_INCLUDE_DIRS}
  ${EIGEN_INCLUDE_DIRS}
  ${FLANN_INCLUDE_DIRS}
  ${glog_DIR}/../../../include

)

  message ("CERES external  ${glog_DIR}   --> ${OpenMVG_INCLUDE_DIRS}")
endif (OpenMVG_USE_INTERNAL_CERES)

Using this modification I got only 8 errors and many link errors :

Description Gravité Code    Projet  Fichier Ligne   État de la suppression
'i' : la variable d'index de l'instruction 'for' OpenMP doit disposer d'un type intégral signé  Erreur  C3016   domset  G:\Lib\openMVG\src\software\SfM\clustering\domSetLibrary\domset.cc  427 
'i' : la variable d'index de l'instruction 'for' OpenMP doit disposer d'un type intégral signé  Erreur  C3016   domset  G:\Lib\openMVG\src\software\SfM\clustering\domSetLibrary\domset.cc  438 
'i' : la variable d'index de l'instruction 'for' OpenMP doit disposer d'un type intégral signé  Erreur  C3016   domset  G:\Lib\openMVG\src\software\SfM\clustering\domSetLibrary\domset.cc  455 
'i' : la variable d'index de l'instruction 'for' OpenMP doit disposer d'un type intégral signé  Erreur  C3016   domset  G:\Lib\openMVG\src\software\SfM\clustering\domSetLibrary\domset.cc  469 
'=' binaire : aucun opérateur trouvé qui accepte un opérande de partie droite de type 'const double' (ou il n'existe pas de conversion acceptable)  Erreur  C2679   openMVG_multiview   G:\Lib\openMVG\src\openMVG\multiview\solver_essential_five_point.cpp    120 
'=' binaire : aucun opérateur trouvé qui accepte un opérande de partie droite de type 'const double' (ou il n'existe pas de conversion acceptable)  Erreur  C2679   openMVG_multiview   G:\Lib\openMVG\src\openMVG\multiview\solver_essential_five_point.cpp    121 
'=' binaire : aucun opérateur trouvé qui accepte un opérande de partie droite de type 'const double' (ou il n'existe pas de conversion acceptable)  Erreur  C2679   openMVG_multiview   G:\Lib\openMVG\src\openMVG\multiview\solver_essential_five_point.cpp    122 
'=' binaire : aucun opérateur trouvé qui accepte un opérande de partie droite de type 'const double' (ou il n'existe pas de conversion acceptable)  Erreur  C2679   openMVG_multiview   G:\Lib\openMVG\src\openMVG\multiview\solver_essential_five_point.cpp    123 

openmp error is not a problem but eigen I don't understand and still investigate it

About eigen I test code using this source :

#ifdef INTERNAL 
#include <g:/Lib/openMVG/src/third_party/eigen/Eigen/dense>
#include <g:/Lib/openMVG/src/third_party/eigen/Eigen/SparseCore>
#include <g:/Lib/openMVG/src/third_party/eigen/Eigen/StdVector>
#else  // version 3.3.90
#include <g:/lib/Eigen/Eigen/Dense>
#include <g:/lib/Eigen/Eigen/SparseCore>
#include <g:/lib/Eigen/Eigen/StdVector>
#endif 

enum
{
    coef_xxx, .......
};


void FivePointsPolynomialConstraints(const Eigen::MatrixXd &E_basis) {
    // Build the polynomial form of E (equation (8) in Stewenius et al. [1])
    Eigen::VectorXd E[3][3];
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) {
            E[i][j] = Eigen::VectorXd::Zero(20);
            E[i][j](coef_x) = double(E_basis(3 * i + j, 0));
            E[i][j](coef_y) = E_basis(3 * i + j, 1);
            E[i][j](coef_z) = E_basis(3 * i + j, 2);
            E[i][j](coef_1) = E_basis(3 * i + j, 3);
        }
    }
}

when internal is defined no problem and when INTERNAL is not same error

C:\Users\Laurent.PC-LAURENT-VISI\Documents\Visual Studio 2013\test74255\main.cpp(39): error C2679: '=' binaire : aucun opérateur trouvé qui accepte un opérande de partie droite de type 'double' (ou il n'existe pas de conversion acceptable)
1> g:\lib\eigen\eigen\src/Core/IndexedView.h(113): note: est peut-être 'Eigen::IndexedView::IvcIndex> &Eigen::IndexedView::IvcIndex>::operator =(const Eigen::IndexedView::IvcIndex> &)'
1> with
1> [
1> Derived=Eigen::Matrix,
1> T=
1> ]
1> g:\lib\eigen\eigen\src/Core/MatrixBase.h(139): note: ou 'Eigen::IndexedView::IvcIndex> &Eigen::MatrixBase::IvcIndex>>::operator =(const Eigen::MatrixBase::IvcIndex>> &)'
1> with
1> [
1> Derived=Eigen::Matrix,
1> T=
1> ]
1> C:\Users\Laurent.PC-LAURENT-VISI\Documents\Visual Studio 2013\test74255\main.cpp(39): note: lors de la tentative de mise en correspondance de la liste des arguments '(Eigen::IndexedView::IvcIndex>, double)'
1> with
1> [
1> Derived=Eigen::Matrix,
1> T=
1> ]
1>C:\Users\Laurent.PC-LAURENT-VISI\Documents\Visual Studio 2013\test74255\main.cpp(40): error C2679: '=' binaire : aucun opérateur trouvé qui accepte un opérande de partie droite de type 'const double' (ou il n'existe pas de conversion acceptable)
1> g:\lib\eigen\eigen\src/Core/IndexedView.h(113): note: est peut-être 'Eigen::IndexedView::IvcIndex> &Eigen::IndexedView::IvcIndex>::operator =(const Eigen::IndexedView::IvcIndex> &)'
1> with
1> [
1> Derived=Eigen::Matrix,
1> T=
1> ]
1> g:\lib\eigen\eigen\src/Core/MatrixBase.h(139): note: ou 'Eigen::IndexedView::IvcIndex> &Eigen::MatrixBase::IvcIndex>>::operator =(const Eigen::MatrixBase::IvcIndex>> &)'
1> with
1> [
1> Derived=Eigen::Matrix,
1> T=
1> ]
1> C:\Users\Laurent.PC-LAURENT-VISI\Documents\Visual Studio 2013\test74255\main.cpp(40): note: lors de la tentative de mise en correspondance de la liste des arguments '(Eigen::IndexedView::IvcIndex>, const double)'
1> with
1> [
1> Derived=Eigen::Matrix,
1> T=
1> ]

I posted a message on eigen list

it can be due to the fact that coef_xxx is an enum that is not a strongly typed enum.
Do you can try to make it a strongly typed enum:

enum xyz{a, b, c};
// versus
enum class : uint8_t xyz{a, b, c};

Ok problem is here when I write

E[i][j](0) = E_basis(3 * i + j, 0); there is no error
E[i][j](int(coef_y)) = E_basis(3 * i + j, 1);there is no error

enum class : uint8_t xyz{a, b, c}; what do you mean ?
*I tried
1 enum uint8_t: int{ same error
2 enum class uint8_t: int{ with E[i][j](uint8_t::coef_x) gives main.cpp(6): error C2371: 'uint8_t' : redéfinition ; types de base différents
3 enum class : uint8_t xyz{{ gives 1>C:\Users\Laurent.PC-LAURENT-VISI\Documents\Visual Studio 2013\test74255\main.cpp(6): error C3430: une énumération délimitée doit avoir un nom

Sorry I meant: enum class xyz: uint8_t{.
I typed too fast :-(

OK :

enum class xyz : uint8_t {
    coef_xxx,

and

E[i][j](xyz::coef_x) = E_basis(3 * i + j, 0);

same error :
main.cpp(36): error C2679: '=' binaire :aucun opérateur trouvé qui accepte un opérande de partie droite de type 'const double' (ou il n'existe pas de conversion acceptable)

Ok, so the underlying type is not detected and used by the compiler.
(BTW, I also think that the VS error message is not right, at least hard to understand for us.)

If E[i][j]((int)xyz::coef_x) = E_basis(3 * i + j, 0); is working, then the c++11 way will be something like:

#include <type_traits> //for std::underlying_type
...
enum class xyz : uint8_t {
    coef_xxx,
...
};

using xyz_utype = std::underlying_type<xyz>::type;
..

E[i][j](static_cast<xyz_utype>(xyz::coef_x)) = E_basis(3 * i + j, 0);

So the cast is required in order to force to have the underlying type to be used as an integer index for the Eigen matrix.

I don't understand why you have the message and not the VS2015 CI we are using. Perhaps a story about a compiler updates...

I don't think problem is with VS 2015.
In https://github.com/openMVG/openMVG/issues/974#issuecomment-327563127 when I use internal eigen there is no problem but in my eigen version 3.3.90 problem appears

  • Tested on Linux GCC with Eigen 3.3.90 and the problem does not appear.
    I will try later on during the week on Windows.

I sent a message to eigen list and first answers is :
a workaround either cast your enums to int (e.g., int(coef_x)) or better replace the enums by "const int".

and second answer is :
I fixed the issue: https://bitbucket.org/eigen/eigen/commits/034fba127699
I will test this commit as soon as will be available on https://github.com/RLovelett/eigen

So I think I got the fix commit when I have downloaded the last dev. version of Eigen this morning.

Ok I insert in code https://github.com/openMVG/openMVG/blob/develop/src/software/SfM/clustering/domSetLibrary/domset.cc and uptdate eigen using bitbucket.org and compiling is OK but not linking using ceres-version 1.13.0 (windows 10-vs 2015 win64) ceres .lib is not found.

I changed cmakelists :

if (NOT Ceres_FOUND)
  set(OpenMVG_USE_INTERNAL_CERES ON)
  set(CERES_INCLUDE_DIRS
    ${CMAKE_CURRENT_SOURCE_DIR}/third_party/ceres-solver/include
    ${CMAKE_CURRENT_SOURCE_DIR}/third_party/ceres-solver/internal/ceres/miniglog
    ${PROJECT_BINARY_DIR}/third_party/ceres-solver/config)
    FILE(READ "${CMAKE_CURRENT_SOURCE_DIR}/third_party/ceres-solver/VERSION" CERES_CONFIG)
    STRING(REGEX REPLACE "version ([0-9.]+).*" "\\1" CERES_VERSION ${CERES_CONFIG})
  set(CERES_LIBRARIES ceres cxsparse)
else()
      message ("CeRES LIB ${CURRENT_ROOT_INSTALL_DIR}")
  set(OpenMVG_USE_INTERNAL_CERES OFF)
  set(CERES_LIBRARIES "${CURRENT_ROOT_INSTALL_DIR}/lib/ceres" cxsparse)
endif()

but error message is now G:\Lib\install\ceres-solver\lib\ceres.obj not found. Path is good but it is not an obj but .lib. I'm not a CMake expert...
Any ideas are welcome

I would adise you to use the internal ceres for an initial testing, since everything will compile & run fine.

  • else you can read http://ceres-solver.org/installation.html#using-ceres-with-cmake and see that using ${CERES_LIBRARIES} must be sufficient. So you don't need to do an else close, since in other part of the code ${CERES_LIBRARIES} is already used.

"else you can read http://ceres-solver.org/installation.html#using-ceres-with-cmake and see that using ${CERES_LIBRARIES} must be sufficient. So you don't need to do an else close, since in other part of the code ${CERES_LIBRARIES} is already used."

No problem is : I use cmake-gui. It is not possible to overwrite some cache variable with cmake-gui when you run twice cmake-gui. Hence I can change ceres_dir eigen but internal path are wrong.
Now using original cmakelists.txt and using git-bash I can compile link and install openMVG :

#!/bin/bash -e
myRepo=$(pwd)
CMAKE_CONFIG_GENERATOR="Visual Studio 14 2015 Win64"
RepoSource=openMVG
cd Build/$RepoSource
cmake -G"$CMAKE_CONFIG_GENERATOR"  \
-DOpenMVG_USE_OPENCV:BOOL=ON  \
-DOpenMVG_USE_OCVSIFT:BOOL=ON  \
-DOpenCV_DIR:PATH="$myRepo"/install/opencv \
-DEIGEN_DIR:PATH="$myRepo"/eigen \
-DCeres_DIR="$myRepo"/install/ceres-solver/cmake  \
-DCMAKE_INSTALL_PREFIX=../../install/"$RepoSource"  ../../"$RepoSource"/src
cd ..
cmake --build $RepoSource  --config debug 
cmake --build $RepoSource  --config release 
cmake --build $RepoSource  --target install --config release 
cmake --build $RepoSource  --target install --config debug 
cd ..

Thanks for your help

You're welcome. Impatient to see some of your reconstructions ;-)

Was this page helpful?
0 / 5 - 0 ratings

Related issues

ghost picture ghost  ·  3Comments

itsdsk picture itsdsk  ·  6Comments

yuancaimaiyi picture yuancaimaiyi  ·  4Comments

yonelay11 picture yonelay11  ·  5Comments

jpwhitney picture jpwhitney  ·  7Comments