Der Einbau von OpenCV in die statische Bibliothek führt zu fehlenden FunktionenC++

Programme in C++. Entwicklerforum
Guest
 Der Einbau von OpenCV in die statische Bibliothek führt zu fehlenden Funktionen

Post by Guest »

Ich erstelle meine statische C/C++-Bibliothek entweder für mein iOS oder Android. Vorher habe ich die dynamische Bibliothek mit dem Schlüsselwort SHARED erstellt und alles hat gut funktioniert. Ich habe openCV für beide Versionen (Android und iOS) kreuzkompiliert und verwende eine lokale Version. Ich habe die entsprechenden Plattformen/ios/build_framework.py und platform/android/build_sdk.py ausgeführt. Wenn Sie die Option --help ausführen, heißt es außerdem, dass die statische Version standardmäßig erstellt wird. Dies ist meine CMakeLists.txt, die ich zum Erstellen der STATIC-Version verwende. Für das SHAREDhabe ich nur das Schlüsselwort ausgetauscht.

Code: Select all

cmake_minimum_required(VERSION 3.0)

# for android I use my android toolchain file of course
set(CMAKE_TOOLCHAIN_FILE ios.toolchain.cmake)

project(mylibrary)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(OpenCV_DIR ${CMAKE_CURRENT_LIST_DIR}/opencv/opencv/build/ios/opencv2.framework)
include_directories("${OpenCV_DIR}/Headers")
link_directories("${OpenCV_DIR}")

# find header & source
file(GLOB_RECURSE SOURCE_C "src/*.c")
file(GLOB_RECURSE SOURCE_CPP "src/*.cpp")
file(GLOB_RECURSE HEADER_H "src/*.h")
file(GLOB_RECURSE HEADER_HPP "src/*.hpp")

add_library(${PROJECT_NAME} STATIC
${SOURCE_C}
${SOURCE_CPP}
${HEADER_H}
${HEADER_HPP}
)

# currently not used
# set_target_properties(${PROJECT_NAME} PROPERTIES
# COMPILER_FLAGS "-arch arm64 -std=c++11"
# )

# opencv package
target_link_libraries(${PROJECT_NAME} PRIVATE "${OpenCV_DIR}/opencv2")

set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-v")

# includes
source_group("Header include" FILES ${HEADER_H})
source_group("Header include" FILES ${HEADER_HPP})
source_group("Source src" FILES ${SOURCE_C})
source_group("Source src" FILES ${SOURCE_CPP})
Wenn ich meine App erstelle, erhalte ich die Fehlermeldung, dass die von mir verwendete openCV-Funktion medianBlurundefiniert ist:

Code: Select all

Undefined symbols for architecture arm64
Symbol: cv::medianBlur(...)
Referenced frin: myfunc in mylibrary.a ...
Auch wenn ich mit nm mylibrary.a | nachschaue grep medianBlur Ich erhalte nur undefiniertes U _YN2cv10medianBlurERKNS_11_InputArrayERKNS_12_OutputArrazEi für Android und iOS. Wenn ich diesen Befehl auf den dynamischen Bibliotheken ausführe, erhalte ich in beiden Fällen ein T.
Wie baue ich opencv in meine statische Bibliothek ein, damit alle Funktionen gefunden werden können?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post