Opencv imread вызывает ошибки компоновщика в liblapack при компоновке статической библиотеки, которая зависит от OpenCV и Ceres-Solver - PullRequest
1 голос
/ 02 апреля 2019

Я пытаюсь настроить компиляцию своей собственной библиотеки, которая зависит как от OpenCV, так и от Ceres-Solver (http://ceres -solver.org / ) с использованием CMake.Однако при этом я получаю ошибки компоновщика при связывании моей библиотеки с некоторыми исполняемыми файлами, особенно я считаю виновной непрочитанную функцию OpenCV, но проблема также может быть связана с Ceres.

Я использую Ceres версии 1.14.0 и OpenCV версии 3.2.0.

Я уже понял, что проблема не останется, если я объявлю ceres :: Solver :: Summary в основном.Я просто не понимаю, зачем это нужно?

Я уже свел свою проблему к самому минимальному примеру, который мне удалось придумать:

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;
}

Я ожидал, что он скомпилируется без проблем, но если я оставлю закомментированными do_nothing_but_fix_linking, я получу следующие ошибки:

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«
...