Cmake_osx_sysroot

The sysroot macosx is an alias for the latest OS X SDK so that's ok. If you want to override it you can from CMake. The patch in the forum thread ends up hardcoding the sdk path. CMake is a free multi-language multi-platform compilation tool (the name stands for cross-platform make).Although Autotools is the traditional tool used on Linux—by GNU projects among others—, various projects have changed to CMake during the last few years, for different reasons, including for example KDE and MySQL. Set (CMAKEOSXSYSROOT / Applications / Xcode. App / Contents / Developer / Platforms / MacOSX. Platform / Developer / SDKs / MacOSX10. 10.sdk /) Add a debug preprocessor def. This is optional.

  • Status:Closed
  • Resolution: Out of scope
  • Fix Version/s: None
  • Labels:
  • Platform/s:
  • Commits:
    fe220f3b5b6dcc5b98ce35684e9408c0fc669ddd, e9af987f2821112ec6b03af5e2527c37c5580c68

cmake: CMAKE_OSX_SYSROOT should be used so that the right system paths are picked up. This enables it to use a SDK version specific copy of the system includes.

This is particularly causing a problem on Mac with the OpenGL.framework which may reside inside the sdk paths in XCode and not in /System/Frameworks

Gerrit Reviews

No reviews matched the request. Check your Options in the drop-down menu of this sections header.
Assignee:
Stephen Kelly (Unused account) (Inactive)
Reporter:
Andy Shaw
Votes:
0Vote for this issue
Watchers:
3Start watching this issue

Jan 23, 2011

ITP student Patrick Hebron and I have been working on a new Processing video library built on top of OpenCV (with the goal of no vdig on windows and better movie playback support all around.) This is all a bit obscure, but it was such a struggle to build stand-alone static libraries for OpenCV on Mac OS X (backwards compatible to 10.5) that we could link to via JNI that I thought I would document the process in case this comes up for anyone else in the future.

First of all, what is a static library and why should I care?

Some reading: http://en.wikipedia.org/wiki/Library_(computing)

Let’s say you are familiar with mac ports or homebrew or you’ve read some cryptic instructions online about how to download an open source project from a repository and built it via the command line. Most likely, you built that project and installed some files to usr/lib or opt/local/lib, etc. Most likely these files were “dynamic” or “shared” library files, meaning they can be used by various applications on your computer. This is a good thing and saves you from having multiple copies of libraries, one for each application that uses say, openCV or FFMPEG or something like that.

A static library is the opposite and cannot be shared. It is a library that is used for building a target application and essentially becomes embedded into that application. If you are an openFrameworks or Cinder user, you may have encountered static libraries. They are the .a files that are referenced by your xcode project. For example:

In the case of building a Processing library (or compiling an OF or Cinder application), we’re looking to distribute something that does not require a separate install. We don’t want to say, here is some code you can use but before you can use it, take a whole day to figure out how to build opencv from the source and install it to this strange directory on your machine.

So, if you need to build OpenCV from source to static libraries to link from an xcode project, here is how you do it.

Step 1. Get the OpenCV source

You can download it from here:

http://sourceforge.net/projects/opencvlibrary/

or use the command line to get it via SVN:

Cmake_osx_sysroot Clion

Step 2. Use the CMake GUI to create “make” files

You can do all this with unix commands via terminal, but I found the Cmake Gui to be quite useful. You can download it here:

When you run CMake, you have to select two directories. “Where is the source code” — browse to the directory where you downloaded OpenCV. “Where to build the binaries” — pick a directory where you want to build the shared libraries. Here’s what it looks like on my machine:

Now press the “configure” button.

You’ll then be asked to specify a generator. If you prefer to use an IDE, select “Xcode.” If you’d like to build it via terminal, select “Unix Make files.” For the purposes of this tutorial, I’ll pick Xcode.

Once you hit ok (and wait a minute or so), all of the build options will suddenly appear in the center of the CMake window. Here’s where things get a little tricky and what you need to select can be an “it depends” on what exactly you are doing this for. Here are the settings I am using:

  • Uncheck “BUILD_NEW_PYTHON_SUPPORT” (I don’t need python)
  • Uncheck “BUILD_SHARED_LIBRARIES” (This is important, this will cause it to build the static libraries instead of shared!)
  • Uncheck “BUILD_TESTS” (Don’t need these)
  • Add “I386″ to CMAKE_OSX_ARCHITECTURES. I’m looking for these static libraries to be backwards compatible to 32-bit systems and Leopard (and Processing runs in 32-bit only) so this is the architecture I’m using, but you might choose some different.
  • Change “CMAKE_OSX_SYSROOT” to /Developer/SDKs/MacOSX10.5.sdk. Same thing as previous item.
  • Uncheck “WITH_FFMPEG”. You’ll get errors unless you have FFMPEG on your system
  • Uncheck “WITH_D1394″. Same thing, you’ll get errors unless you have D1394 on your system.
  • Check “WITH_QUICKTIME”. You may want to leave this out. For me, I need to use QUICKTIME (instead of the newer QTKit) because of a weird threading error that happens with Java. I’m hoping to eventually sort this threading error out so that we can use the QTKit framework.

After you have finished your settings, press “Configure” again. Then press “Generate”.

Step 3. Build the static libs!

Set Cmake_osx_sysroot

If you picked “Xcode”, you’ll now have an XCode project in your directory that you can open!

If you used Unix make, you can then browse to the directory via terminal and type “make”!

Once you build the project, you’ll see you have the following static libs in these directorys:

Cmake Osx Sysroot

/lib/libopencv_calib3d.a
/lib/libopencv_flann.a
/lib/libopencv_imgproc.a
/lib/libopencv_video.a
/lib/libopencv_contrib.a
/lib/libopencv_gpu.a
/lib/libopencv_legacy.a
/lib/libopencv_core.a
/lib/libopencv_haartraining_engine.a
/lib/libopencv_ml.a
/lib/libopencv_features2d.a
/lib/libopencv_highgui.a
/lib/libopencv_objdetect.a
/3rdparty/lib/liblibjasper.a
/3rdparty/lib/liblibjpeg.a
/3rdparty/lib/liblibpng.a
/3rdparty/lib/liblibtiff.a
/3rdparty/lib/libopencv_lapack.a
/3rdparty/lib/libzlib.a

Here are some good additional references I used:

Cmake_osx_sysroot Ios

For building OpenCV 1.0
http://ildan.blogspot.com/2009/11/creating-universal-static-opencv.html

Some backwards compatibility tips:
http://cocoawithlove.com/2009/09/building-for-earlier-os-versions-in.html

OF Forum discussion:
http://www.openframeworks.cc/forum/viewtopic.php?f=10&t=4943

Cinder forum discussion:
http://forum.libcinder.org/topic/opencv-status

Cmake_osx_sysroot

Cmake osx sysroot

Change Cmake_osx_sysroot

Questions, comments, things I missed? Let me know!