使用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
是怎么回事儿呀。。。
项目顶层的 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 加速的代码
Most helpful comment
顶层 CMakeLists.txt 加上一句 find_package(OpenCV REQUIRED ) ,OpenCV3.3亲测可用