如何将库集成到我的库中
Posted
技术标签:
【中文标题】如何将库集成到我的库中【英文标题】:How to integrate library into my library 【发布时间】:2018-08-21 19:55:47 【问题描述】:我创建了自己的库,使用 Opencv 和其他库。这里是
CMakelists.txt of my library:
cmake_minimum_required(VERSION 3.0)
project("face_module")
add_definitions("-std=c++11" "-Wno-write-strings")
file(GLOB_RECURSE SOURCES "*.cpp"")
file(GLOB_RECURSE HEADERS "*.h"")
add_library("face_module" SHARED $SOURCES $HEADERS)
target_include_directories(
"face_module" PUBLIC "include" )
find_package(OpenCV 3.2.0 REQUIRED)
find_package(jsoncpp REQUIRED)
set( JSONCPP_LIBRARIES jsoncpp curl )
SET(OpenCV_LIBS opencv_core opencv_highgui opencv_videoio opencv_imgproc opencv_imgcodecs )
target_link_libraries("face_module"
"$CMAKE_CURRENT_LIST_DIR/lib/tensorflow/libtensorflow.so"
"$CMAKE_CURRENT_LIST_DIR/lib/tensorflow/libtensorflow_framework.so"
$OpenCV_LIBS
$JSONCPP_LIBRARIES
pthread)
我在我的程序中使用了那个库和 Opencv:
cmake_minimum_required(VERSION 3.0)
project("database_generator")
add_definitions("-std=c++11" )
file(GLOB SOURCES "database_generator.cpp")
file(GLOB HEADERS "")
add_executable("database_generator" $SOURCES $HEADERS)
target_link_libraries("database_generator"
"face_module")
当我在我的 database_generator 项目中使用 OpenCV VideoCapture 时,网络摄像头向我发送了黑色图像。我不明白为什么会这样。 正如您在 database_generator 的 CmakeLists.txt 中看到的那样,我没有添加 Opencv 库,因为它也在我的 face_module 库中添加。
在我的库生成过程中,我做了哪些糟糕的事情?
这是我的database_generator的主文件
int main(int argc, char **argv)
cv::VideoCapture *video_capture = new cv::VideoCapture(0);
if (!video_capture->isOpened())
std::cerr << "Can't open camera " << 0 << std::endl;
while(1)
cv::Mat u8x3_image;
*video_capture >> u8x3_image;
std::cout << "lalal"<< u8x3_image.empty() << std::endl;
cv::imshow("facedetector", u8x3_image);
cv::waitKey(100);
使用前面的代码,摄像头向我发送正常图像,但是一旦我使用我的库的一个类,网络摄像头发送的图像是黑色的......
编辑: 我也尝试在我的库中做所有事情,我只是生成一个可执行文件(没有库)
project("database_generator2")
add_definitions("-std=c++11" )
file(GLOB_RECURSE SOURCES "*.cpp" "../module/database_generator.cpp")
file(GLOB_RECURSE HEADERS "*.h" )
add_executable("database_generator2" $SOURCES $HEADERS)
target_include_directories( "database_generator2" PUBLIC "include" )
find_package(OpenCV 3.2.0 REQUIRED)
find_package(jsoncpp REQUIRED)
set( JSONCPP_LIBRARIES jsoncpp curl )
SET(OpenCV_LIBS opencv_core opencv_highgui opencv_videoio opencv_imgproc opencv_imgcodecs )
target_link_libraries("database_generator2"
"$CMAKE_CURRENT_LIST_DIR/lib/tensorflow/libtensorflow.so"
"$CMAKE_CURRENT_LIST_DIR/lib/tensorflow/libtensorflow_framework.so"
$OpenCV_LIBS
$JSONCPP_LIBRARIES
pthread)
我也有同样的问题,所以问题不是由于库生成。 我认为它来自 tensoflow 库 libtensorflow_framework.so libtensorflow.so 但我不明白为什么。
libtensorflow_framework.so:
linux-vdso.so.1 => (0x00007fff575d2000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7afda2b000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7afd722000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7afd505000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7afd183000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7afcf6d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7afcba3000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7afe7f9000)
libtensorflow.so:
linux-vdso.so.1 => (0x00007ffc32ba1000)
libtensorflow_framework.so => /home/xavier/Desktop/developpement/Network/pam_face_module/library/lib/tensorflow/./libtensorflow_framework.so (0x00007f0bc5a55000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0bc5851000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f0bc5634000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0bc532b000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f0bc4fa9000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0bc4d93000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0bc49c9000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0bc9233000)
这真的很奇怪,因为 opencv 的 imread 功能正常工作,但 VideoCapture 给我发送黑色图像:(
编辑2: 太疯狂了,事实上,只要我使用 tensorlow 对象,VideoCapture 就会向我发送黑色图像......这可能来自 tensorflow 库编译吗?
【问题讨论】:
【参考方案1】:如果您使用未正确链接的库,您甚至不会获得可执行文件。
这应该会有所帮助
http://answers.opencv.org/question/129659/i-want-to-read-image-captured-by-webcam-videocapture-and-write-that-to-some-external-file/
【讨论】:
以上是关于如何将库集成到我的库中的主要内容,如果未能解决你的问题,请参考以下文章