Question: So i am running ubuntu 13.04 on the sd card of my new beaglebone black. I am attempting to install opencv-2.4.2. I've got everything installed without errors but when i try to build and run a program 

```
g++ 'pkg-config opencv --cflags' FILE.cpp -o FILE 'pkg-config opencv --libs'

```

I get the error:

```
pkg-config opencv --cflags: no such file or directory
pkg-config opencv --libs: no such file or directory

```

When I run pkg-config --libs opencv it gives me the correct directory (/usr/lib/ .so) with all my libraries and I have confirmed they are all actually there. pkg-config opencv --cflags gives -I/usr/include/opencv. Which also exists. 

I have edited my bash.bashrc, opencv.pc, and opencv.conf files reflect these paths. They were /usr/local/lib but no libraries installed there. 

I'm running out of ideas guys, any help or suggestions would be great. 

Thanks.

Answer: 
1. Yes; `volatile` only applies to the reference it's applied to.
2. No; objects that happen to be pointed to by final fields do not magically become immutable.  

An object with mutable non-public members is only immutable if those members can never be mutated. (obviously)
Found out after some testing all my answers.

1. volatile only applies to reference. Any object point by volatile object need not to be visible other threads.
2. Yes final is important. Without it object of class will not be immutable.
3. Suppose a variable "obj" is pointing to location x(where the actual object is placed) when a function call on obj is started then during function call all member variables will be read from location x even if some other thread assign a different object on "obj".
4. Assumed explanations for all answers are correct.