Hello everyone,
I'm trying to use OpenCV in Swift, and I wrote some code to test OpenCV functionality. It works when I built it manually through clang, but don't work when I use "swift build" function. Can anyone explain what I'm doing wrong?
- File tree
- Error Message
error: link command failed with exit code 1 (use -v to see invocation)
Sources/cxxFrontend/qualy_image.cpp:5: error: undefined reference to 'cv::FileStorage::FileStorage(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
Sources/cxxFrontend/qualy_image.cpp:7: error: undefined reference to 'cv::FileStorage::operator[](char const*) const'
Sources/cxxFrontend/qualy_image.cpp:7: error: undefined reference to 'cv::FileNode::operator[](char const*) const'
Sources/cxxFrontend/qualy_image.cpp:7: error: undefined reference to 'cv::FileNode::operator int() const'
Sources/cxxFrontend/qualy_image.cpp:10: error: undefined reference to 'cv::FileStorage::release()'
Sources/cxxFrontend/qualy_image.cpp:11: error: undefined reference to 'cv::FileStorage::~FileStorage()'
Sources/cxxFrontend/qualy_image.cpp:11: error: undefined reference to 'cv::FileStorage::~FileStorage()'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
- Package.swift
let package = Package(
name: "CT_Race_Results",
dependencies: [
.package(url: "https://github.com/swiftcsv/SwiftCSV.git", from: "0.10.0")
],
targets: [
// Targets are the basic building blocks of a package, defining a module or a test suite.
// Targets can depend on other targets in this package and products from dependencies.
.target(
name: "cxxFrontend",
),
.executableTarget(
name: "SwiftBackend",
dependencies: ["SwiftCSV", "cxxFrontend"],
swiftSettings: [.interoperabilityMode(.Cxx)]
),
]
)
- CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project( cxxFrontend )
find_package( opencv4 REQUIRED )
include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/include )
set(SOURCES qualy_image.cpp include/main_header.h )
add_executable( cxxFrontend ${SOURCES} )
target_link_libraries( cxxFrontend ${OpenCV_LIBS} )
- qualy_image.cpp
#include <iostream>
#include <opencv2/core.hpp>
void qualy_image() {
cv::FileStorage fs("../Temp/qualy.json", cv::FileStorage::READ);
int test = (int)fs["Test"]["position"];
std::cout << test << std::endl;
fs.release();
}
int main() {
qualy_image();
return 1;
}
- main_header.h
#include <iostream>
#include <opencv2/core.hpp>
void qualy_image();
