Hi there,
I have a build script for opencv (using manjaro linux):
OPENCV_VERSION=4.5.1
cd CMAKE
rm -rf opencv || ls
mkdir -p opencv
curl -L https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.tar.gz | tar xz -C opencv --strip-components 1
mkdir -p opencv/build
cd opencv/build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_ZLIB=ON \
-DBUILD_PNG=ON \
-DWITH_PNG=ON \
-DWITH_OPENEXR=OFF \
-DWITH_JPEG=ON \
-DBUILD_JASPER=ON \
-DWITH_JASPER=ON \
-DBUILD_TBB=ON \
-DWITH_TBB=ON \
-DWITH_TIFF=ON \
-DWITH_WEBP=OFF \
-DWITH_OPENCL=OFF \
-DWITH_GTK=OFF \
-DWITH_FFMPEG=OFF \
-DWITH_1394=OFF \
-DWITH_IPP=OFF \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \
-DBUILD_opencv_apps=OFF \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DOPENCV_FORCE_3RDPARTY_BUILD=ON \
-DBUILD_WITH_STATIC_CRT=OFF \
-DCMAKE_INSTALL_PREFIX=opencv_install \
..
make -j 4
make install
cd ../..
then I wan to build a library on my own linking opencv using this:
cmake_minimum_required(VERSION 3.10)
project(mylib VERSION 0.1)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
find_package(OpenCV 4.5.1 EXACT REQUIRED PATHS "${PATH_TO_OPENCV_SRC}/opencv/build/opencv_install/lib/cmake/opencv4/")
include_directories(${OpenCV_INCLUDE_DIRS})
link_directories( ${CMAKE_BINARY_DIR}/bin)
message("NOW INCLUDE DIR: ")
message(${OpenCV_INCLUDE_DIRS})
message(("NOW LIBS DIR: "))
message(${OpenCV_LIBS})
add_library(mylib SHARED "src/mylib.cxx")
target_include_directories(mylib PUBLIC "include")
target_link_libraries(mylib PUBLIC ${OpenCV_LIBS})
target_link_libraries( mylib PUBLIC dl )
#m
target_link_libraries( mylib PUBLIC m )
#pthread
target_link_libraries( mylib PUBLIC pthread )
#rt
target_link_libraries( mylib PUBLIC rt )
I get the following linking error on the resulting .so:
ldd -r libdenk.so
linux-vdso.so.1 (0x00007ffd1bd8f000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f8195ade000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f8195abc000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007f8195aaf000)
libgstbase-1.0.so.0 => /usr/lib/libgstbase-1.0.so.0 (0x00007f8195a2e000)
libgstreamer-1.0.so.0 => /usr/lib/libgstreamer-1.0.so.0 (0x00007f81958e5000)
libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0x00007f819588d000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x00007f8195759000)
libgstapp-1.0.so.0 => /usr/lib/libgstapp-1.0.so.0 (0x00007f8195747000)
libgstriff-1.0.so.0 => /usr/lib/libgstriff-1.0.so.0 (0x00007f8195734000)
libgstpbutils-1.0.so.0 => /usr/lib/libgstpbutils-1.0.so.0 (0x00007f81956f5000)
libgstaudio-1.0.so.0 => /usr/lib/libgstaudio-1.0.so.0 (0x00007f8195678000)
libgstvideo-1.0.so.0 => /usr/lib/libgstvideo-1.0.so.0 (0x00007f81955c2000)
libgsttag-1.0.so.0 => /usr/lib/libgsttag-1.0.so.0 (0x00007f8195581000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f819543b000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f819525c000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f8195093000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f8195079000)
libgomp.so.1 => /usr/lib/libgomp.so.1 (0x00007f8195038000)
/usr/lib64/ld-linux-x86-64.so.2 (0x00007f81980d0000)
libz.so.1 => /usr/lib/libz.so.1 (0x00007f819501e000)
libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0x00007f8195017000)
libunwind.so.8 => /usr/lib/libunwind.so.8 (0x00007f8194ffd000)
libdw.so.1 => /usr/lib/libdw.so.1 (0x00007f8194f5f000)
libffi.so.7 => /usr/lib/libffi.so.7 (0x00007f8194f53000)
libpcre.so.1 => /usr/lib/libpcre.so.1 (0x00007f8194ee1000)
liborc-0.4.so.0 => /usr/lib/liborc-0.4.so.0 (0x00007f8194e5a000)
liblzma.so.5 => /usr/lib/liblzma.so.5 (0x00007f8194e32000)
libelf.so.1 => /usr/lib/libelf.so.1 (0x00007f8194e18000)
libbz2.so.1.0 => /usr/lib/libbz2.so.1.0 (0x00007f8194e05000)
undefined symbol: _ZN2cv3dnn14dnn4_v202006098NMSBoxesERKSt6vectorINS_5Rect_IiEESaIS4_EERKS2_IfSaIfEEffRS2_IiSaIiEEfi (./libdenk.so)
c++filt _ZN2cv3dnn14dnn4_v202006098NMSBoxesERKSt6vectorINS_5Rect_IiEESaIS4_EERKS2_IfSaIfEEffRS2_IiSaIiEEfi
results in
cv::dnn::dnn4_v20200609::NMSBoxes(std::vector<cv::Rect_, std::allocator<cv::Rect_ > > const&, std::vector<float, std::allocator > const&, float, float, std::vector<int, std::allocator >&, float, int)
so I assume opencv_dnn does not get linked properly, but why and how do I fix it?
thanks in advance!