Using Freetype library with CMake [duplicate] - c++

I'm new to cmake, and I'm only using it to install opencv on my ubuntu linux.
Here's the command I ran: cmake -DCMAKE_BUILD_TYPE=Release DCMAKE_INSTALL_PREFIX=/home/jinha/OCV/source
Then it returns the error:
FATAL: In-source builds are not allowed. You should create separate directory for build files.
My current directory, ~/OCV/build/opencv, does contain the CMakefiles.txt file, so that's not the problem. I tried to change the directory in my command, but they all raise the same error. I saw the other answers on this issue, so I erased CMakeFiles directory and CMakeCache.txt file every time before I ran the command, but none of them worked.
Thanks.

It wants you to create a separate build directory (anywhere), and run cmake there. For example:
mkdir my_build_dir
cd my_build_dir
rm ../CMakeCache.txt
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/home/jinha/OCV/source
Note the .. in this example telling cmake where to look for the source.
In case you didn't remove CMakeCache.txt before building again, it will still show this error.
So, please remember to delete CMakeCache.txt first before running cmake.

After you have success downloaded and unzipped OpenCV sources from sources you need create simple command-file install.sh. For example, your working dir will be /home/user/myopencv
So /home/user/myopencv/install.sh will be contain next code:
#!/bin/bash
rm CMakeCache.txt
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local
make
make install
make clean
Next
chmod 777 install.sh
./install.sh
And after the all you will get those executable files:
root#cartman:/usr/local/bin# ls -las | grep opencv
32 -rwxr-xr-x 1 root root 29888 апр 20 18:10 opencv_annotation
244 -rwxr-xr-x 1 root root 247608 апр 20 18:10 opencv_createsamples
244 -rwxr-xr-x 1 root root 247504 апр 20 18:10 opencv_haartraining
20 -rwxr-xr-x 1 root root 18600 апр 20 18:10 opencv_performance
288 -rwxr-xr-x 1 root root 294592 апр 20 18:10 opencv_traincascade
16 -rwxr-xr-x 1 root root 14288 апр 20 18:10 opencv_version
60 -rwxr-xr-x 1 root root 61040 апр 20 18:10 opencv_visualisation
Enjoy!

Related

QUEX_PATH issue while using tokenizer

I'm trying to install trainable-tokenizer. I have installed all the dependencies as per the README. this is trainable-tokenizer https://github.com/jirkamarsik/trainable-tokenizer. i have installed quex.deb using installer from quex.org which is a dependency for trainable-tokenizer.
when i try to do sudo make install i get the following error
ThinkPad-T430:~/tmp/OpenFST/tokenizer/trainable-tokenizer/src$ sudo make install
[ 6%] Building FeaturesReader with quex
Environment variable QUEX_PATH has not been defined.
error: environment variable 'QUEX_PATH' is not defined.
error: your system is 'posix'.
error: if you are using bash-shell, append the following line
error: to your '~/.bashrc' file:
error:
error: export QUEX_PATH=directory-where-quex-has-been-installed
make[2]: *** [quex_files/trtok_read_features_FeaturesReader] Error 255
make[1]: *** [CMakeFiles/trtok.dir/all] Error 2
make: *** [all] Error 2
but i have already set up the QUEX_PATH.
ThinkPad-T430:~/tmp/OpenFST/tokenizer/trainable-tokenizer/src$ echo $QUEX_PATH
/opt/quex/quex-0.65.4/
ThinkPad-T430:~/tmp/OpenFST/tokenizer/trainable-tokenizer/src$ ll /opt/quex/quex-0.65.4/
total 68
drwxrwxr-x 5 root root 4096 May 25 17:42 ./
drwxrwxr-x 3 root root 4096 May 25 17:42 ../
-rw-r--r-- 1 root root 181 Oct 13 2013 COPYRIGHT.txt
drwxr-xr-x 5 root root 4096 May 25 17:42 demo/
-rw-r--r-- 1 root root 0 Feb 26 02:01 __init__.py
-rwxr-xr-x 1 root root 26424 Oct 13 2013 LGPL.txt*
drwxr-xr-x 2 root root 4096 May 25 17:42 manpage/
drwxr-xr-x 6 root root 4096 May 25 18:02 quex/
-rw-r--r-- 1 root root 3098 Oct 13 2013 quex.bat
-rwxrwxr-x 1 root root 2649 Feb 26 02:01 quex-exe.py*
-rw-r--r-- 1 root root 4074 Oct 13 2013 README
-rw-rw-r-- 1 root root 118 Mar 22 15:22 unit_test_results.txt
i also added export QUEX_PATH=/opt/quex/quex-0.65.4/ to the .bashrc
ThinkPad-T430:~/tmp/OpenFST/tokenizer/trainable-tokenizer/src$ vim ~/.bashrc
ThinkPad-T430:~/tmp/OpenFST/tokenizer/trainable-tokenizer/src$ echo $QUEX_PATH
/opt/quex/quex-0.65.4/
ThinkPad-T430:~/tmp/OpenFST/tokenizer/trainable-tokenizer/src$ sudo make install
[ 6%] Building FeaturesReader with quex
Environment variable QUEX_PATH has not been defined.
error: environment variable 'QUEX_PATH' is not defined.
error: your system is 'posix'.
but still i get the same error.
I fixed the issue using the -I flag. I had to use quex -I.
I would guess that the real problem is that your python is python 3.0+
and not python 2.7 as required for Quex.
Admittedly, the error message does not tell this directly.

Eclipse CDT Post-Build commands error

I have a C++ project and I´m using Eclipse CDT 3.8.1 as the IDE tool, with a workspace of 5 different projects...
One of my projects is a shared library, and at the end of compilation I want to copy its code to a test/bin directory for testing.
I´ve gone to Project Properties -> C/C++ Build -> Settings -> Build Steps and at "Post-build steps", "Command", I´ve added:
cp *.so ../../../bin
(OBS: ../../../bin is the correct path from the Debug folder - I´ve checked already).
What happens is that I get the following error on post build:
cp *.so ../../../bin
cp: cannot stat ‘*.so’: No such file or directory
I said: ok, this may be a permission problem, so I changed the post commands to:
whoami;ls -al; ls *.so;
And I got on Eclipse console:
whoami
aeidev
ls -al
total 264
drwxrwxr-x 3 aeidev aeidev 4096 Apr 25 15:55 .
drwxrwxr-x 5 aeidev aeidev 4096 Apr 22 16:27 ..
-rwxrwxr-x 1 aeidev aeidev 242556 Apr 25 15:55 libaeirtuaccess.so
-rw-rw-r-- 1 aeidev aeidev 1763 Apr 23 20:47 makefile
-rw-rw-r-- 1 aeidev aeidev 245 Apr 23 20:46 objects.mk
-rw-rw-r-- 1 aeidev aeidev 526 Apr 23 20:47 sources.mk
drwxrwxr-x 2 aeidev aeidev 4096 Apr 25 15:41 src
ls *.so
15:55:11 Build Finished (took 1s.80ms)
And them I changed again to ls *.so and I got:
ls -al *.so
ls: cannot access *.so: No such file or directory
15:57:50 Build Finished (took 715ms)
It´s a very strange behaviour. In the same workspace I have a different shared library and the original cp *.so works fine...
Any ideas of what´s going on here ?
Is it a known Eclipse bug ?
Thanks for helping...
I believe the commands are not executed in a shell by default, so wildcards are not evaluated. Try executing like /bin/sh -c 'cp *.so ../../../bin/'. Also you should use Eclipse's built-in variables to copy to the desired path.

How to build pHash on MacOSX Lion (using latest ffmpeg-devel)

Building pHash 0.9.4 on OSX can turn out to be tricky.
For those of you who've run into issues, my somewhat lengthy answer below might help.
Make sure you've got macports fully updated and working. This means a recent Xcode, and inside Xcode preferences->downloads->components install Command-Line Tools !
$ sudo port selfupdate
# if you've had previous build issues:
$ sudo port clean --all
# get pHash
wget http://www.phash.org/releases/pHash-0.9.4.tar.gz
tar zxvf pHash-0.9.4.tar.gz
cd pHash-0.9.4
# remove old versions of ffmpeg, e.g.
$ sudo port installed ffmpeg
$ sudo port uninstall --follow-dependents ffmpeg #0.7.11_1+mmx
$ sudo port uninstall --follow-dependents ffmpeg #0.7.8_0
# install latest ffmpeg-devel version (#20120329 for me) - enable the non-free stuff as well
$ sudo port install ffmpeg-devel +nonfree
# double check that you have some new header files
$ ll -tr /opt/local/include/
total 8816
-rw-r--r-- 1 root admin 191 Dec 23 2004 lua.hpp
-rw-r--r-- 1 root admin 1026 Dec 27 2007 lualib.h
-rw-r--r-- 1 root admin 5777 Dec 27 2007 lauxlib.h
...
drwxr-xr-x 6 root admin 204 Jul 12 17:27 libmodplug
drwxr-xr-x 3 root admin 102 Jul 12 17:32 libswscale
drwxr-xr-x 3 root admin 102 Jul 12 17:32 libswresample
drwxr-xr-x 3 root admin 102 Jul 12 17:32 libpostproc
drwxr-xr-x 41 root admin 1394 Jul 12 17:32 libavutil
drwxr-xr-x 5 root admin 170 Jul 12 17:32 libavformat
drwxr-xr-x 8 root admin 272 Jul 12 17:32 libavfilter
drwxr-xr-x 3 root admin 102 Jul 12 17:32 libavdevice
drwxr-xr-x 10 root admin 340 Jul 12 17:32 libavcodec
# get CImg and copy CImg.h into your pHash dir
$ cd ..
$ wget http://downloads.sourceforge.net/project/cimg/CImg-1.5.0.zip
$ unzip CImg-1.5.0.zip
$ cp CImg-1.5.0/CImg.h pHash-0.9.4/
$ cd pHash-0.9.4
# copy the JNI headers from your Java SDK into your pHash dir - for 1.7.0 they're here:
$ cp /Library/Java//JavaVirtualMachines/1.7.0.jdk/Contents/Home/include/jni.h ./
$ cp /Library/Java//JavaVirtualMachines/1.7.0.jdk/Contents/Home/include/darwin/jni_md.h ./
# install libsndfile, libsamplerate and mpg123 if not installed already
$ sudo port install libsndfile
$ sudo port install libsamplerate
$ sudo port install mpg123
# now run configure, with Java enabled as you likely want those cool bindings, and expect the missing libavcodec error:
$ ./configure --enable-java
OR this which would make more sense:
$ ./configure --enable-java CPPFLAGS="-I/opt/local/include" LDFLAGS="-L/opt/local/lib"
but configure completely ignores the new include/lib paths stated :( Seemingly as they're hardcoded inside configure.
...
checking CImg.h usability... no
checking CImg.h presence... no
checking for CImg.h... no
checking whether CImg.h is in the current or src directory.... yes
*** Configuring video Hash ***
checking whether FFmpeg is present... checking for avcodec_alloc_frame in -lavcodec... no
configure: error:
*** libavcodec not found.
So then since configure expects all the libs and includes to be in /usr/local/ (not /opt/local) and I cant't get it to look elsewhere, the only thing left to do is brute-force it ! :D
# edit ./configure as follows
$ nano configure
CTRL-W -> search for ' -L/' (note the space)
# edit the lines as follows
LDFLAGS="$LDFLAGS -L/usr/local/lib -L/opt/local/lib"
CPPFLAGS="$CPPFLAGS -I/usr/local/include -I/opt/local/include"
# Or do the newbie version (I actually did this the first time!)
$ sudo mv /usr/local/lib /usr/local/lib-foo
$ sudo mv /usr/local/include/ /usr/local/include-foo
$ sudo ln -s /opt/local/lib /usr/local/lib
$ sudo ln -s /opt/local/include /usr/local/include
$ ll /usr/local/
total 16
drwxr-xr-x 32 root wheel 1088 Jun 29 18:04 bin
drwxr-xr-x 3 root wheel 102 Mar 6 14:40 etc
lrwxr-xr-x 1 root wheel 18 Jul 12 19:27 include -> /opt/local/include
drwxr-xr-x 11 root wheel 374 Jul 12 19:22 include-foo
lrwxr-xr-x 1 root wheel 14 Jul 12 19:27 lib -> /opt/local/lib
drwxr-xr-x 25 root wheel 850 Jul 12 19:23 lib-foo
drwxr-xr-x 8 root wheel 272 Oct 11 2010 sbin
drwxr-xr-x 4 root wheel 136 Jun 12 11:52 share
# at this point ./configure should work ok
Time to run make - you'll get a bunch of errors:
$ make
# on to the code bits:
# we need to adjust src/cimgffmpeg.cpp to support the latest version of ffmpeg
# a few things have moved from being deprecated to having been completely changed:
$ make 2>&1 | grep error
cimgffmpeg.cpp:57: error: 'av_open_input_file' was not declared in this scope
cimgffmpeg.cpp:70: error: 'CODEC_TYPE_VIDEO' was not declared in this scope
cimgffmpeg.cpp:134: error: 'avcodec_decode_video' was not declared in this scope
cimgffmpeg.cpp:202: error: 'av_open_input_file' was not declared in this scope
cimgffmpeg.cpp:216: error: 'CODEC_TYPE_VIDEO' was not declared in this scope
cimgffmpeg.cpp:283: error: 'avcodec_decode_video' was not declared in this scope
cimgffmpeg.cpp:339: error: 'av_open_input_file' was not declared in this scope
cimgffmpeg.cpp:357: error: 'av_open_input_file' was not declared in this scope
cimgffmpeg.cpp:368: error: 'CODEC_TYPE_VIDEO' was not declared in this scope
cimgffmpeg.cpp:399: error: 'av_open_input_file' was not declared in this scope
cimgffmpeg.cpp:410: error: 'CODEC_TYPE_VIDEO' was not declared in this scope
# change as follows; left: original downloaded source, right: modified source
$ diff ~/Downloads/pHash-0.9.4-fresh/src/cimgffmpeg.cpp ~/dev/pHash-0.9.4/src/cimgffmpeg.cpp
57c57
< if(av_open_input_file(&st_info->pFormatCtx, st_info->filename, NULL, 0, NULL)!=0)
---
> if(avformat_open_input(&st_info->pFormatCtx, st_info->filename, NULL, NULL)!=0)
70c70
< if(st_info->pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_VIDEO)
---
> if(st_info->pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO)
134c134
< avcodec_decode_video(st_info->pCodecCtx, pFrame, &frameFinished,packet.data, packet.size);
---
> avcodec_decode_video2(st_info->pCodecCtx, pFrame, &frameFinished, &packet);
202c202
< if(av_open_input_file(&(st_info->pFormatCtx),st_info->filename,NULL,0,NULL)!=0){
---
> if(avformat_open_input(&(st_info->pFormatCtx),st_info->filename,NULL,NULL)!=0){
216c216
< if(st_info->pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_VIDEO)
---
> if(st_info->pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO)
282,283c282
< avcodec_decode_video(st_info->pCodecCtx, pFrame, &frameFinished,
< packet.data,packet.size);
---
> avcodec_decode_video2(st_info->pCodecCtx, pFrame, &frameFinished, &packet);
339c338
< if (av_open_input_file(&pFormatCtx, file, NULL, 0, NULL))
---
> if (avformat_open_input(&pFormatCtx, file, NULL, NULL))
357c356
< if (av_open_input_file(&pFormatCtx, file, NULL, 0, NULL))
---
> if (avformat_open_input(&pFormatCtx, file, NULL, NULL))
368c367
< if(pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_VIDEO)
---
> if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO)
399c398
< if (av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL))
---
> if (avformat_open_input(&pFormatCtx, filename, NULL, NULL))
410c409
< if(pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_VIDEO)
---
> if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO)
That was tons of fun I'm sure, no worries we're almost there.
# make should now complete with only useless warnings
$ make
$ sudo make -n install
# if all went well you've not got pHash with Java bindings
# let's build the Java files and test it
$ cd ll bindings/java/org/phash/
$ javac *.java
# go back to the Java bindins root and run
$ cd ../..
# oh yeah.. if you actually DID rename the include/lib dirs previously then:
$ sudo rm /usr/local/lib
$ sudo rm /usr/local/include
$ sudo mv /usr/local/include-foo/ /usr/local/include
$ sudo mv /usr/local/lib-foo/ /usr/local/lib
# drum roll..
$ java -Djava.library.path=/usr/local/lib org/phash/pHash -mh ~/Downloads/s01.jpg ~/Downloads/s02.jpg
File 1: /Users/xxx/Downloads/s01.jpg
File 2: /Users/xxx/Downloads/s02.jpg
0.3159722222222222
# now go try out your image recognition app ideas ;)

Fail to compile c++ source to swc using Alchemy on Mac OS X Lion

When I tried to compile a [.cpp] file to [.swc] file, I got this:
dyld: Library not loaded: /usr/lib/libltdl.3.dylib
And I found that my libltdl is
Poechant:src poechant$ ls -l /usr/lib/libltdl.*
lrwxr-xr-x 1 root wheel 15 10 11 08:17 /usr/lib/libltdl.7.2.2.dylib -> libltdl.7.dylib
-rwxr-xr-x 1 root wheel 88848 10 11 08:17 /usr/lib/libltdl.7.dylib
lrwxr-xr-x 1 root wheel 15 10 11 08:17 /usr/lib/libltdl.dylib -> libltdl.7.dylib
How to solve it?
According to the post here
http://forums.adobe.com/message/3892045:
The following set of commands would work( i tested, too )
cd /usr/lib/
sudo ln -s libltdl.7.dylib libltdl.3.dylib

How do I make Boost multithreading?

I am trying to compile the latest Boost c++ libraries for Centos. I 've used bjam install and it has placed the libraries in /usr/lib and /usr/lib64.
The problem is I need the -mt variants for a specific application to run. I cannot understand in the documentation how to create the multithreading variants. :(
Please give me a hint!
Thanks!
-mt is just distribution specific extension.
either edit your config file or create symbolic link to libboost_thread
andrey#localhost:~$ ls -l /usr/lib/libboost_thread*
-rw-r--r-- 1 root root 174308 2010-01-25 10:36 /usr/lib/libboost_thread.a
lrwxrwxrwx 1 root root 41 2009-11-04 10:10 /usr/lib/libboost_thread-gcc41-mt-1_34_1.so.1.34.1 -> libboost_thread-gcc42-mt-1_34_1.so.1.34.1
-rw-r--r-- 1 root root 49912 2008-11-01 02:55 /usr/lib/libboost_thread-gcc42-mt-1_34_1.so.1.34.1
lrwxrwxrwx 1 root root 17 2010-01-27 18:32 /usr/lib/libboost_thread-mt.a -> libboost_thread.a
lrwxrwxrwx 1 root root 25 2010-01-27 18:32 /usr/lib/libboost_thread-mt.so -> libboost_thread.so.1.40.0
lrwxrwxrwx 1 root root 25 2010-01-27 18:32 /usr/lib/libboost_thread.so -> libboost_thread.so.1.40.0
-rw-r--r-- 1 root root 89392 2010-01-25 10:36 /usr/lib/libboost_thread.so.1.40.0
You can build all variations of the boost binary libraries using the --build-type=complete option. For example:
bjam --build-type=complete stage
This will put all library files into <your boost dir>/stage/lib/