【问题标题】:Cmake - Generate shared library with OpenCV insideCmake - 在里面生成带有 OpenCV 的共享库
【发布时间】:2016-06-11 18:43:56
【问题描述】:

我使用以下CmakeList.txt 编译了一个.so 文件:

cmake_minimum_required(VERSION 3.5.1)
project(phase)
SET(OpenCV_INCLUDE_DIRS "/usr/local/include/opencv")
include_directories(INCLUDE_DIR include ${OpenCV_INCLUDE_DIRS})
set(OpenCV_LIB_DIR "/usr/local/lib")
link_directories(${OpenCV_LIB_DIR})
aux_source_directory(src SOURCE)
add_library(dct SHARED src/dct.c ${SOURCE})

它没有给我任何错误。的,我想在 Python 项目中使用它:

import numpy as np
import numpy.ctypeslib as npct
from ctypes import c_int, c_double

_array_1d_floatBase = npct.ndpointer(dtype=np.float32, ndim=1, flags="CONTIGUOUS")

def _from_param(cls, obj):
    if obj is None:
        return obj
    return _array_1d_floatBase.from_param(obj)

array_1d_float = type(
    'DoubleArrayType',
    (_array_1d_floatBase,),
    {'from_param': classmethod(_from_param)}
)
array_1d_double = npct.ndpointer(dtype=np.double, ndim=1, flags="CONTIGUOUS")
libcd = npct.load_library("/home/facu/libdct.so", ".")
libcd.FastCosineTransform.restype = None
libcd.FastCosineTransform.argtypes = [array_1d_float, c_int, c_int, c_int]

def dct_lib(in_array, xsize, ysize, sign):
    libcd.FastCosineTransform(in_array, xsize, ysize, sign)
    return in_array 

in_array = laplacian
print in_array
out_dct = dct_lib(in_array, 512, 512, 1)

但它给了我以下错误:

OSError: /home/facu/libdct.so: undefined symbol: cvGetSeqElem

我想我在我的 cmake 文件中遗漏了一些东西。生成带有 OpenCV 的 .so 需要包含哪些内容?

【问题讨论】:

    标签: python c++ opencv cmake shared-libraries


    【解决方案1】:

    我在您的 CMakeLists.txt 中找不到您实际调用类似 target_link_libraries(dct opencv) 的部分。我不确定是否有类似find_package(opencv REQUIRED) 或类似的查找例程,或者如果您打算使用find_package,是否必须构建一个。 您必须将库本身链接到某个地方。到目前为止,您只设置了库所在的路径,而不是要链接的实际库名称。

    编辑:谷歌是你的朋友。 Here 你会发现如何使用 CMake 链接到 openCV。

    【讨论】:

      猜你喜欢
      • 2021-02-24
      • 1970-01-01
      • 2015-11-09
      • 2021-11-21
      • 2016-02-16
      • 1970-01-01
      • 2020-06-07
      • 2021-12-26
      • 1970-01-01
      相关资源
      最近更新 更多