Я хочу построить статически, потому что мне нужно распространять приложение на несколько платформ (Linux и Windows). OpenCV был построен и установлен на машине linux статически.
Здесь вы можете увидеть соответствующие части, которые включены в мой CMakeLists.txt, которые должны были сделать ссылку OpenCV статически
#windows
message("Compiling for windows")
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
set(BUILD_SHARED_LIBS OFF) #this has no effect
set(CMAKE_LINK_LIBRARY_SUFFIX ".a") #this has no effect
#openCV
set(OpenCV_STATIC ON) #this has no effect
find_package(OpenCV REQUIRED )
include_directories(${OpenCV_INCLUDE_DIRS} )
Во время линковки я получаю эту ошибку, так как она, очевидно, является библиотекой, необходимой для opencv:
/usr/lib/x86_64-linux-gnu/libpng.so: error adding symbols: File in wrong format
collect2: error: ld returned 1 exit status
Как вы можете видеть, используется libpng.so. Хотя в этой папке также доступен файл libpng.a.
Это происходит только с mingw, но использование флага "-stati c" внутри
target_link_libraries( Tracking ${OpenCV_LIBS} "-static")
приводит к
/usr/bin/x86_64-w64-mingw32-ld: attempted static link of dynamic object `/usr/lib/x86_64-linux-gnu/libpng.so'
collect2: error: ld returned 1 exit status
Таким образом, он по-прежнему использует файл .so вместо .a. Поэтому я подозреваю, что мне нужно изменить конфигурацию OpenCV
Я потратил часы на это, поэтому помощь приветствуется.