首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用emcmake未定义的符号(emscripten和opencv)

使用emcmake未定义的符号(emscripten和opencv)
EN

Stack Overflow用户
提问于 2020-04-26 22:54:30
回答 1查看 494关注 0票数 0

我正在尝试在浏览器中使用OpenCV构建一个极简主义项目。

我已经在我的电脑上编译了OpenCV。

下面是C++代码(josef.cpp):

代码语言:javascript
运行
复制
#include <iostrem>

#include <opencv2/imgcodecs.hpp>
#include <opencv2/opencv.hpp>   

int main(int argc, char **argv) 
{ 
    printf("Hello here\n"); 
    cv::Mat m;
    std::cout << m;
}

下面是CMakeLists.txt

代码语言:javascript
运行
复制
cmake_minimum_required(VERSION 2.8)
project( josef )

# Give here the directory in which we have
# the file OpenCVConfig.cmake
set(OpenCV_DIR "/usr/local/lib/cmake/opencv4")
find_package( OpenCV REQUIRED )
add_executable( josef josef.cpp )
target_link_libraries( josef ${OpenCV_LIBS} )

使用编译

代码语言:javascript
运行
复制
cmake .
make

运行良好,并提供了一个可产生预期结果的可执行文件:

代码语言:javascript
运行
复制
Hello here
[]

我的问题是在尝试使用emscripten时出现的。

代码语言:javascript
运行
复制
emcmake cmake .

会产生很多类似的警告:

代码语言:javascript
运行
复制
CMake Warning (dev) at /usr/local/lib/cmake/opencv4/OpenCVModules.cmake:393 (add_library):
  ADD_LIBRARY called with SHARED option but the target platform does not
  support dynamic linking.  Building a STATIC library instead.  This may lead
  to problems.
Call Stack (most recent call first):
  /usr/local/lib/cmake/opencv4/OpenCVConfig.cmake:126 (include)
  CMakeLists.txt:7 (find_package)
This warning is for project developers.  Use -Wno-dev to suppress it.

然后

代码语言:javascript
运行
复制
emmake make

在未定义的符号上失败:

代码语言:javascript
运行
复制
error: undefined symbol: _ZN2cv3Mat10deallocateEv
warning: Link with `-s LLD_REPORT_UNDEFINED` to get more information on undefined symbols
warning: To disable errors for undefined symbols use `-s ERROR_ON_UNDEFINED_SYMBOLS=0`

我的问题是:我做错了什么?如何告诉emscripten著名的缺失符号在哪里(如果我没理解错的话,这些符号就是.so文件)?

EN

回答 1

Stack Overflow用户

发布于 2020-04-29 13:11:58

这在一定程度上是一种黑客解决方案。

  • 在文件/usr/local/lib/cmake/opencv4/OpenCVModules.cmake中,将"SHARED“的每个实例更改为”STATIC“。
  • cmake文件中,添加行

代码语言:javascript
运行
复制
file( GLOB opencv_js "/path/to/opencvjs/opencv/build_js/lib/*.a")

本部分假设您手动编译了opencv。

  • 然后参考我对my next question的回答。(简而言之:使用画布,不要使用cv::imdecode.)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61442822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档