Ncnn: Ubuntu下编译example,出错

Created on 1 Aug 2017  ·  12Comments  ·  Source: Tencent/ncnn

使用ncnn目录下的CMakeLists.txt已经成功在build文件下生成了src/libncnn.a文件
然后使用example下的CMakeLists.txt尝试编译生成squeezenet可执行文件。
由于make的时候有些错误(找不到platform.h),对应修改了CMakeLists.txt,修改后如下:
find_package(OpenCV REQUIRED core highgui imgproc)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../build/src)
include_directories(${CMAKE_CURRENT_BINARY_DIR}/../build/src)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../src)
include_directories(${CMAKE_CURRENT_BINARY_DIR}/../src)

add_executable(squeezenet squeezenet.cpp)
LINK_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../build/src)
target_link_libraries(squeezenet ncnn ${OpenCV_LIBS})

make的时候提示:
Linking CXX executable squeezenet
/usr/bin/ld: 找不到 -lncnn
collect2: error: ld returned 1 exit status
make[2]: * [squeezenet] 错误 1
make[1]:
[CMakeFiles/squeezenet.dir/all] 错误 2
make: *
* [all] 错误 2

是怎么回事儿呀。。。

Most helpful comment

顶层 CMakeLists.txt 加上一句 find_package(OpenCV REQUIRED ) ,OpenCV3.3亲测可用

All 12 comments

项目顶层的 CMakeLists.txt 里头把最后 # add_subdirectory(examples) 取消注释,用顶层的 cmake 编译项目

@nihui 完美解决了我的问题,非常感谢!

我镜像了一下上述修正后的操作,make的时候却发生了另外一种编译错误

[ 86%] Linking CXX executable squeezenet
CMakeFiles/squeezenet.dir/squeezenet.cpp.o: In function main': squeezenet.cpp:(.text.startup+0x8a): undefined reference tocv::imread(cv::String const&, int)'
collect2: error: ld returned 1 exit status
examples/CMakeFiles/squeezenet.dir/build.make:99: recipe for target 'examples/squeezenet' failed
make[2]: * [examples/squeezenet] Error 1
CMakeFiles/Makefile2:85: recipe for target 'examples/CMakeFiles/squeezenet.dir/all' failed
make[1]:
[examples/CMakeFiles/squeezenet.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *
* [all] Error 2

@Igamegum 会不会opencv没有配置好?
我把我的完整实现过程记录在博客中了,如果需要你可以去看下。http://blog.csdn.net/fuwenyan/article/details/76576708

@VivienFu 我用的是Opencv3.1 跟这个版本有关系吗

不确定呢,之前看另一个博客说Ubuntu下只支持openCV2.*,
你可以单独写个测试opencv的程序看看。
我用的是opencv2.4.13,

可以试试install-opencv-2.4.13-in-ubuntu.sh配置opencv2.4.13。

@Igamegum 我也遇到了这个问题,请问是怎么解决的,是opencv版本问题吗?

int main(int argc, char* argv)
^
Linking CXX executable squeezenet
CMakeFiles/squeezenet.dir/squeezenet.cpp.o: In function main': squeezenet.cpp:(.text.startup+0x7a): undefined reference tocv::imread(cv::String const&, int)'
collect2: error: ld returned 1 exit status
make[2]:
[examples/squeezenet] Error 1
make[1]:
[examples/CMakeFiles/squeezenet.dir/all] Error 2
make: *
* [all] Error 2
是opencv的这个问题吗?

我想问一下,在运行example的时候,是如何使用armneon加速的代码的,运行example是否用到了arm文件夹里面的文件 @nihui

顶层 CMakeLists.txt 加上一句 find_package(OpenCV REQUIRED ) ,OpenCV3.3亲测可用

@xiaomage11 编译时期决定的,如果是为 android / ios 编译就会自动用 arm neon 加速的代码

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Abel119 picture Abel119  ·  4Comments

varbegin picture varbegin  ·  3Comments

chuan298 picture chuan298  ·  3Comments

SisterL picture SisterL  ·  3Comments

xhappy picture xhappy  ·  5Comments