1

I am trying to set up compilation of my own library that depends on both OpenCV and Ceres-Solver (http://ceres-solver.org/) using CMake. However when doing so I get linker errors when linking my library to some executables, especially I believe OpenCV's imread function to be the culprit, but the problem may also be related to Ceres.

I am using Ceres version 1.14.0 and OpenCV version 3.2.0.

I already figured out that the problem doesn't remain if I declare a ceres::Solver::Summary in the main. I just don't get exactly why this is required?

I already boiled my problem down to the most minimal example I was able to come up with:

CMakeLists.txt

find_package(OpenCV REQUIRED)
find_package(Ceres REQUIRED)
add_library(MyLib empty.cc empty.h)
target_include_directories(MyLib PUBLIC ${OpenCV_INCLUDE_DIRS} ${CERES_INCLUDE_DIRS})
target_link_libraries(MyLib PRIVATE ${OpenCV_LIBS} ${CERES_LIBRARIES})
# I also tried PUBLIC
add_executable(Main main.cc)
target_link_libraries(Main MyLib)

main.cc

#include "ceres/ceres.h"
#include <opencv2/opencv.hpp>
int main() {
  cv::imread("a", 0);
  //ceres::Solver::Summary do_nothing_but_fix_linking;
}

I expected it to compile without issues, but if I leave the do_nothing_but_fix_linking commented out I will get these errors:

make

/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_dgemoveT«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_zgemoveT«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_strscal«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_sscal«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_ssqtrans«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_zsqtrans«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_sgeset«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_sgemoveT«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_cGetNB«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_ctrscal«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_zgemaxnrm«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_cgemaxnrm«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_dscal«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_cgezero«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_dgezero«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_dgemaxnrm«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_csqtrans«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_ccplxdivide«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_ccplxinvert«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_dger«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_zcplxinvert«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_cgeru«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_zGetNB«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_sgescal«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_dtrscal«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_zgeset«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_sger«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_sgezero«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_sgemaxnrm«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_sGetNB«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_zgeru«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_cgemoveT«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_zcplxdivide«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_xerbla«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_dGetNB«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_zgezero«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_cgeset«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_dgeset«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_zscal«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_dgescal«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_cscal«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_ztrscal«
/usr/lib/x86_64-linux-gnu/liblapack.so: Warnung: undefinierter Verweis auf »ATL_dsqtrans«
Jörg P.
  • 41
  • 5

0 Answers0