【问题标题】:Can I install raspicam c++ libraries on OS X?我可以在 OS X 上安装 raspicam c++ 库吗?
【发布时间】:2016-11-16 00:14:56
【问题描述】:

我正在开发一个将在树莓派上运行的 OpenCV 项目。到目前为止,我一直在 Xcode 中的 Mac 上进行开发,一切顺利。我最近意识到,为了使用树莓派相机,我需要使用 raspicam 库。

我的问题是,我可以在 OS X 上安装 raspicam 库还是它们是特定于树莓派硬件的?

我希望能够在我的 Mac 上开发、编译和构建,以及在树莓派上编译和构建。我试图避免在 Pi 上进行开发。

如果这不可能,您对我应该如何管理这个项目的开发设置有什么建议吗?

我的代码中只有一小部分需要 raspicam 库,因此我不反对设置一个标志,如果在 Pi 上运行则执行 raspicam 代码,否则如果在 Mac 上运行则执行当前工作的 OpenCV 代码。

到目前为止,我已经下载了 raspicam 源并且我已经完成了:

cd raspicam-0.1.3
mkdir build
cd build
cmake -DCMAKE_PREFIX_PATH="/usr/local/Cellar/opencv3/3.1.0_3/share/OpenCV" ..

这是输出:

-- Adding cv library
-- 
-- -------------------------------------------------------------------------------
-- General configuration for raspicam 0.1.2
-- -------------------------------------------------------------------------------
-- 
    Built as dynamic libs?:ON
    Compiler:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- C++ flags (Release):        -std=c++0x -Wl,--no-as-needed     -lpthread
-- C++ flags (Debug):          -std=c++0x -Wl,--no-as-needed     -lpthread
-- CMAKE_CXX_FLAGS:          -std=c++0x -Wl,--no-as-needed  
-- CMAKE_BINARY_DIR:         /Users/andres/Downloads/raspicam-0.1.3/build
-- 
-- CMAKE_SYSTEM_PROCESSOR = x86_64
-- BUILD_SHARED_LIBS = ON
-- BUILD_UTILS = ON
-- CMAKE_INSTALL_PREFIX = /usr/local
-- CMAKE_BUILD_TYPE = Release
-- CMAKE_MODULE_PATH = /usr/local/lib/cmake/;/usr/lib/cmake
-- 
-- CREATE OPENCV MODULE=1
-- CMAKE_INSTALL_PREFIX=/usr/local
-- REQUIRED_LIBRARIES=
-- 
-- 
-- Change a value with: cmake -D<Variable>=<Value>
-- 
-- Configuring done
CMake Warning (dev):
  Policy CMP0042 is not set: MACOSX_RPATH is enabled by default.  Run "cmake
  --help-policy CMP0042" for policy details.  Use the cmake_policy command to
  set the policy and suppress this warning.

  MACOSX_RPATH is not specified for the following targets:

   raspicam
   raspicam_cv

This warning is for project developers.  Use -Wno-dev to suppress it.

-- Generating done
-- Build files have been written to: /Users/andres/Downloads/raspicam-0.1.3/build

然后

make

输出:

Scanning dependencies of target raspicam_cv
[  5%] Building CXX object src/CMakeFiles/raspicam_cv.dir/raspicam_cv.cpp.o
clang: warning: -Wl,--no-as-needed: 'linker' input unused
clang: warning: -lpthread: 'linker' input unused
In file included from /Users/andres/Downloads/raspicam-0.1.3/src/raspicam_cv.cpp:39:
In file included from /Users/andres/Downloads/raspicam-0.1.3/src/./private/private_impl.h:40:
In file included from /Users/andres/Downloads/raspicam-0.1.3/dependencies/mmal/mmal.h:363:
In file included from /Users/andres/Downloads/raspicam-0.1.3/dependencies/mmal/mmal_common.h:40:
In file included from /Users/andres/Downloads/raspicam-0.1.3/dependencies/vcos/vcos.h:116:
/Users/andres/Downloads/raspicam-0.1.3/dependencies/vcos/pthreads/vcos_platform.h:297:22: error: 
      use of undeclared identifier 'CLOCK_REALTIME'
   if (clock_gettime(CLOCK_REALTIME, &ts) == -1)
                     ^
/Users/andres/Downloads/raspicam-0.1.3/dependencies/vcos/pthreads/vcos_platform.h:307:13: error: 
      use of undeclared identifier 'sem_timedwait'
      ret = sem_timedwait( sem, &ts );
            ^
/Users/andres/Downloads/raspicam-0.1.3/dependencies/vcos/pthreads/vcos_platform.h:327:13: warning: 
      'sem_init' is deprecated [-Wdeprecated-declarations]
   int rc = sem_init(sem, 0, initial_count);
            ^
/usr/include/sys/semaphore.h:55:5: note: 'sem_init' has been explicitly marked
      deprecated here
int sem_init(sem_t *, int, unsigned int) __deprecated;
    ^
In file included from /Users/andres/Downloads/raspicam-0.1.3/src/raspicam_cv.cpp:39:
In file included from /Users/andres/Downloads/raspicam-0.1.3/src/./private/private_impl.h:40:
In file included from /Users/andres/Downloads/raspicam-0.1.3/dependencies/mmal/mmal.h:363:
In file included from /Users/andres/Downloads/raspicam-0.1.3/dependencies/mmal/mmal_common.h:40:
In file included from /Users/andres/Downloads/raspicam-0.1.3/dependencies/vcos/vcos.h:116:
/Users/andres/Downloads/raspicam-0.1.3/dependencies/vcos/pthreads/vcos_platform.h:335:13: warning: 
      'sem_destroy' is deprecated [-Wdeprecated-declarations]
   int rc = sem_destroy(sem);
            ^
/usr/include/sys/semaphore.h:53:5: note: 'sem_destroy' has been explicitly
      marked deprecated here
int sem_destroy(sem_t *) __deprecated;
    ^
In file included from /Users/andres/Downloads/raspicam-0.1.3/src/raspicam_cv.cpp:39:
In file included from /Users/andres/Downloads/raspicam-0.1.3/src/./private/private_impl.h:40:
In file included from /Users/andres/Downloads/raspicam-0.1.3/dependencies/mmal/mmal.h:363:
In file included from /Users/andres/Downloads/raspicam-0.1.3/dependencies/mmal/mmal_common.h:40:
In file included from /Users/andres/Downloads/raspicam-0.1.3/dependencies/vcos/vcos.h:116:
/Users/andres/Downloads/raspicam-0.1.3/dependencies/vcos/pthreads/vcos_platform.h:520:13: warning: 
      'sem_init' is deprecated [-Wdeprecated-declarations]
   int rc = sem_init(&event->sem, 0, 0);
            ^
/usr/include/sys/semaphore.h:55:5: note: 'sem_init' has been explicitly marked
      deprecated here
int sem_init(sem_t *, int, unsigned int) __deprecated;
    ^
In file included from /Users/andres/Downloads/raspicam-0.1.3/src/raspicam_cv.cpp:39:
In file included from /Users/andres/Downloads/raspicam-0.1.3/src/./private/private_impl.h:40:
In file included from /Users/andres/Downloads/raspicam-0.1.3/dependencies/mmal/mmal.h:363:
In file included from /Users/andres/Downloads/raspicam-0.1.3/dependencies/mmal/mmal_common.h:40:
In file included from /Users/andres/Downloads/raspicam-0.1.3/dependencies/vcos/vcos.h:116:
/Users/andres/Downloads/raspicam-0.1.3/dependencies/vcos/pthreads/vcos_platform.h:525:7: warning: 
      'sem_destroy' is deprecated [-Wdeprecated-declarations]
      sem_destroy(&event->sem);
      ^
/usr/include/sys/semaphore.h:53:5: note: 'sem_destroy' has been explicitly
      marked deprecated here
int sem_destroy(sem_t *) __deprecated;
    ^
In file included from /Users/andres/Downloads/raspicam-0.1.3/src/raspicam_cv.cpp:39:
In file included from /Users/andres/Downloads/raspicam-0.1.3/src/./private/private_impl.h:40:
In file included from /Users/andres/Downloads/raspicam-0.1.3/dependencies/mmal/mmal.h:363:
In file included from /Users/andres/Downloads/raspicam-0.1.3/dependencies/mmal/mmal_common.h:40:
In file included from /Users/andres/Downloads/raspicam-0.1.3/dependencies/vcos/vcos.h:116:
/Users/andres/Downloads/raspicam-0.1.3/dependencies/vcos/pthreads/vcos_platform.h:541:8: warning: 
      'sem_getvalue' is deprecated [-Wdeprecated-declarations]
   if (sem_getvalue(&event->sem, &value) != 0)
       ^
/usr/include/sys/semaphore.h:54:5: note: 'sem_getvalue' has been explicitly
      marked deprecated here
int sem_getvalue(sem_t * __restrict, int * __restrict) __deprecated;
    ^
In file included from /Users/andres/Downloads/raspicam-0.1.3/src/raspicam_cv.cpp:39:
In file included from /Users/andres/Downloads/raspicam-0.1.3/src/./private/private_impl.h:40:
In file included from /Users/andres/Downloads/raspicam-0.1.3/dependencies/mmal/mmal.h:363:
In file included from /Users/andres/Downloads/raspicam-0.1.3/dependencies/mmal/mmal_common.h:40:
In file included from /Users/andres/Downloads/raspicam-0.1.3/dependencies/vcos/vcos.h:116:
/Users/andres/Downloads/raspicam-0.1.3/dependencies/vcos/pthreads/vcos_platform.h:582:13: warning: 
      'sem_destroy' is deprecated [-Wdeprecated-declarations]
   int rc = sem_destroy(&event->sem);
            ^
/usr/include/sys/semaphore.h:53:5: note: 'sem_destroy' has been explicitly
      marked deprecated here
int sem_destroy(sem_t *) __deprecated;
    ^
6 warnings and 2 errors generated.
make[2]: *** [src/CMakeFiles/raspicam_cv.dir/raspicam_cv.cpp.o] Error 1
make[1]: *** [src/CMakeFiles/raspicam_cv.dir/all] Error 2
make: *** [all] Error 2

【问题讨论】:

    标签: c++ opencv raspberry-pi


    【解决方案1】:

    我想出的解决方案是使用:

    #ifdef __ARM__
    include <raspicam/raspicam.h>
    #endif
    

    主要是

    #ifdef __ARM__
        // pi specific camera initialization code
    #elif __APPLE__
        // osx specific camera initialization code
    #endif
    

    这些预处理器将在代码编译之前进行评估。如果源代码在 pi(ARM 架构)上编译,则 __ARM__ 部分将被编译,否则如果源代码在 osx 上编译,则 __APPLE__ 部分将被编译。

    【讨论】:

      猜你喜欢
      • 2016-03-24
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多