我想在OpenCV库中添加新方法。我创建了my_funct.cpp,代码简单如下:
#include "precomp.hpp"
#include <stdio.h>
void cv::my_funct(){
printf("%s\n","Hello world!");
}
我将标题CV_EXPORTS_W void my_funct();
添加到文件C:\ opencv \ build \ include \ opencv2 \ imgproc \ imgproc.hpp和C:\ opencv \ sources \ modules \ imgproc \ include \ opencv2 \ imgproc \ imgproc。 HPP。然后我使用CMake为整个库构建新的二进制文件,但是当我创建一个我使用my_funct()的新项目时,我收到一个错误:
无法找到过程入口点_ZN2cv8my_functEv 动态链接库path_to_this_project \ project.exe。
其他opencv函数工作得很好。我使用mingw32编译库,OpenCV的版本是2.4.9。你能告诉我我做错了什么吗?
答案 0 :(得分:1)
这看起来像是一个MinGW运行时错误。因此,假设您在构建project.exe
时未遇到任何编译器或链接器错误,您的可执行文件很可能找不到与您的.dll
匹配的.dll.a
导入库(必须包含my_funct()
定义)。
我建议在开发阶段 - 不讨论install()
脚本 - 使用add_custom_command()
和generator expressions添加构建后步骤,以复制{{3}旁边的正确DLL 1}}:
project.exe
当然你也可以让CMake找到匹配的DLL,但在我进入细节之前,我需要看看你的add_custom_command(
TARGET project
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"<... path to matching DLL ...>"
"$<TARGET_FILE_DIR:project>"
)
CMake脚本。
也许也是个好主意 - 如果您正在扩展OpenCV代码 - 将使用ExternalProject_Add()
将OpenCV包含到您的项目中。
<强>参考强>