|
Thanks Leon. It worked.
Thanks,
Lakshmi
|
|
|
|
|
I hope this forum will forgive me to ask this, but...
CMake wants to have line added
<b><b><b></b></b>cmake_minimum_required(VERSION 3.5)</b>
after which opencv.sh complains
./opencv.sh: line 1: syntax error near unexpected token `VERSION'
./opencv.sh: line 1: `cmake_minimum_required(VERSION 3.5)'
I am enclosing my crude log to illustrate some details.
And no, I do not know how to change CMake options to remove this version requirement and still would like to know the "syntax" error I made.
pre lang="text"><pre lang="text">CMake Error at traincascade/CMakeLists.txt:2 (ocv_check_dependencies):
Unknown CMake command "ocv_check_dependencies".
CMake Warning (dev) in CMakeLists.txt:
No cmake_minimum_required command is present. A line of code such as
<b><b><b></b></b>cmake_minimum_required(VERSION 3.5)</b>
should be added at the top of the file. The version specified may be lower
if you wish to support older CMake versions for this project. For more
information run "cmake --help-policy CMP0000".
This warning is for project developers. Use -Wno-dev to suppress it.
Configuring incomplete, errors occurred!
after adding
CMake Error at traincascade/CMakeLists.txt:2 (ocv_check_dependencies):
Unknown CMake command "ocv_check_dependencies".
CMake Warning (dev) in CMakeLists.txt:
No cmake_minimum_required command is present. A line of code such as
cmake_minimum_required(VERSION 3.5)
should be added at the top of the file. The version specified may be lower
if you wish to support older CMake versions for this project. For more
information run "cmake --help-policy CMP0000".
This warning is for project developers. Use -Wno-dev to suppress it.
Configuring incomplete, errors occurred!
after adding
Cmake complains
im-desktop $ ./opencv.sh
./opencv.sh: line 1: syntax error near unexpected token `VERSION'
./opencv.sh: line 1: `cmake_minimum_required(VERSION 3.5)'
jim@jim-desktop $
</pre></pre>
Cheers
Vaclav
|
|
|
|
|
./opencv.sh: line 1: syntax error near unexpected token `VERSION'
./opencv.sh: line 1: `cmake_minimum_required(VERSION 3.5)'
The error ir pretty clear:
There is a syntax error in line 1 of the file opencv.sh. The .sh extension indicates that it is a shell script file which is processed by the shell (probably bash) which will off course know nothing about CMake commands.
CMake Warning (dev) in CMakeLists.txt:
No cmake_minimum_required command is present. A line of code such as
cmake_minimum_required(VERSION 3.5)
Here CMake complains about a missing command in the file CMakeLists.txt.
So you have to add the command to the CMake file CMakeLists.txt.
|
|
|
|
|
It is not about clarity of the error - I am asking WHAT is the syntax error.
I have "cut and paste" the required line from the CMake output.
Do I need to define "token" VERSION" ?
How?
|
|
|
|
|
You are missing the point it is complaining about there is no cmake_minimum_required(VERSION 3.5) in CMakeLists.txt
You said you cut and paste "cmake_minimum_required(VERSION 3.5)" but did you put it into CMakeLists.txt, you didn't put in the script file per chance??????
I am not being condescending here but I need to check, you do get the script file has nothing to do with cmake. Like you we are a bit perplexed because it's step 1 of any cmake file.
Usually the first two lines of CMakeLists.txt are
make_minimum_required (VERSION x.x)
project (_MY_PROJECT_NAME_)
_MY_PROJECT_NAME_ being what you want to call the project
I am sorry for having to ask and check all these really beginner stuff but there is something strange going on.
Whatever the situation I suggest you simply open up a command line window, change to the directory and manually type in the cmake command (so we have any scripts out of the way) and we can see the exact screen spit from cmake itself without the script which is just another source of possible error.
Assuming we pass all this basic stuff there is left one other possibility that your first makelist pulls other makelists and those later makelists have version requirements but that is not the sort of error you seem to be getting. The problem is the exact messages change depending on version CMake and exact OS type so I will leave it as a possibility.
In vino veritas
modified 17-Nov-16 0:42am.
|
|
|
|
|
The syntax error is:
The program processing the file is not able to parse the command cmake_minimum_required(VERSION 3.5) .
The reason is:
You have pasted the command into the file opencv.sh which is processed by the shell (the Unix command line interpreter; see Unix shell - Wikipedia[^] ).
But it should be pasted into the file CMakeLists.txt which is processed by CMake.
The solution (see my initial answer):
Quote: So you have to add the command to the CMake file CMakeLists.txt. instead of opencv.sh.
|
|
|
|
|
First use of CMake, went relatively OK
I did run CMake to build OpenCV , build it with "warning":
CMake Warning at CMakeLists.txt:1250 (message):
The source directory is the same as binary directory. "make clean" may
damage the source tree
What is "source directory" ?
I did messed up some of the "destinations" , but before I'll try it again like to have an answer about "source directory".
Thanks
Cheers Vaclav
<b>The "source directory" CMake asked for was directory WERE CMakeLists.txt file is.</b>
-- modified 18-Nov-16 10:33am.
|
|
|
|
|
Vaclav_Sal wrote: What is "source directory" ?
isn't that where the source files live?
|
|
|
|
|
Duh, WHOSE source ? CMake or the OpenCV ?
|
|
|
|
|
OpenCV.
it's complaining that cleaning the build products might damage the source because they're in the same directories.
|
|
|
|
|
Yes, I got "the complaint " OK that why I was not sure about the source directory.
Thanks
|
|
|
|
|
CMake expects you to run it "out of the source tree"... meaning that you run it from some "build" directory where all the build binaries will be stored. That keeps the source separate from any build artifacts. It's warning you that you're building from within your source directory.
In simple terms... if you have a source tree that looks like this:
OpenCV
|-directory1
|-directory2
|-directory3
|-source_file1
|-source_file2
|-CMakeLists.txt
When you run the CMake command, it should be from a separate, self contained directory:
OpenCV
|-build_dir
|-directory1
|-directory2
|-directory3
|-source_file1
|-source_file2
|-CMakeLists.txt
That keep all the build artifacts in "build_dir" so if you need to blow away your build, it's easy to do so without messing with the source. In this case, to launch cmake, go into your build_dir and launch with cmake ../ -DANYOTHERCMAKEARGS .
|
|
|
|
|
I think the problem is "descriptive terminology".
I have a "mother directory" OpenCV with CMakeList.txt file I execute using CMake.
I did not bother to find were CMake resides.
Now CMake wants to know "source directory".
That is why I asked - apparently it is the "mother directory" and not some specific real source code of OpenCV.
( I suppose analyzing CMake would give some clue )
Now CMake will build OpenCV library and again - where should this "build" be?
Logically it belongs under the mother directory just to keep things under common directory.
Apparently, and I do not discount I made some other mistake, that caused the warning.
It all sounds pretty simple, but turns difficult to troubleshoot when things do not go right.
For example CMake finishes the "build" gives no "option" to quit / exit -just ask for same "click this or that again ".
But I am making some progress thanks to this forum.
Cheers
Vaclav
|
|
|
|
|
I have no idea how my initial post got duplicated.
My apology to forum
Vaclav
|
|
|
|
|
Could I post a question about Eclipse ?
Have a problem linking to library ( GCC options -L -l) and for a week I got no response elsewhere.
Thanks for checking.
Cheers '
Vaclav
|
|
|
|
|
Vaclav_Sal wrote: Could I post a question about Eclipse ?
Yes, you may.
Speed of sound - 1100 ft/sec
Speed of light - 186,000 mi/sec
Speed of stupid - instantaneous.
|
|
|
|
|
Sure but there isn't much to those two they are just followed by a folder path string for the library directory or the include directory.
For header files GCC uses 4 default directories in a set order, the name of those directories is set when the version of GCC.EXE was created. So I can't tell you what they are because it depends on versions, CPU etc. However you can get them back out to screen with a command
GCC -v
I don't do a lot with libraries and from what I know there are 2 default directories in a set order again set at compile time of the linker executable ld.exe and again it has a command to display them
ld -v
Your commands above change the user directories and you can check what is happening by inserting your command line and putting -v at end and you can see what it changes.
In vino veritas
modified 13-Nov-16 21:43pm.
|
|
|
|
|
Thanks Leon,
this is my first usage of Eclipse and I am in "GUI" stage so far.
The problem is little too much for me.
First I used install.sh script for OpenCV and added "library search path" (-L) /usr/local/lib.
Than I am suppose to choose the actual library to use via (-l) from pull down box - but there is no pull down , only text box.
After "updating " Eclipse to newest I noticed that when I type in search path /usr/local/lib it ends up as "/usr/local/lib" , but still no pull down box with the libraries. I must be missing some other option.
( I do wish I was better using command line, but I am not ready for it.)
So I added cv2.so under library add (-l) .
Now everything compiles , but linker stops because it cannot find the "cv2.so" - but I can see it in correct directory.
I still think my (-l) syntax is wrong.
I also tryied to link to OpenCV .../build/lib with same results . This "build/lib" was a product of CMake I found with OpenCV.
I think my biggest issue is - I do not understand how does "shared" library works in Elipse and which library search path is correct.
|
|
|
|
|
Have you checked at CDT Documentation[^]? The command line options for GCC will all be listed on the GCC website, but generally for linking you need the directories listed via -L (capital L), and the names of the libraries vie -l (small l). It is sometime since I have built an application on Unix/Linux so some features may have changed.
It would probably help if you showed your complete GCC command line (between <pre> tags for clarity.) and the exact error message(s) that you receive.
|
|
|
|
|
When passing library file names using the -l option strip of the lib prefix and the extension. If for example the file name is libcv2.so, pass -lcv2 as option.
See Link Options - Using the GNU Compiler Collection (GCC)[^].
If the library file does not match this style (lib prefix, .a or .so extension, or you want to link dynamically to a .so file but there is also a matching .a file), you can pass the full name with path as argument like for object files (gcc recognises if the file is an object file or a libray).
I can't help much regarding Eclipse. But a quick search shows that there are two different sections where you can configure libraries:
- The general library settings (C/C++ Properties - Folder - General - Paths and Symbols)
- The project and tool specific settings (C/C++ Properties - Project - Build - Settings - Tool Settings - Linker)
The first should be used for system wide general library paths while the second is for project specific settings. To add an object or library with full path and name, enter it at Miscellaneous - Other objects.
|
|
|
|
|
Jochen gave a full detail but I am going reduce his answer down to make it simpler
gcc -l sets a library file name to link (we are assuming the file is in the library directory chains).
gcc -L Sets the directory for library files.
So the little l is a library file name (so it will be -l cv2 in your case), it's a simple name no folder, no extension.
cv2.so is a shared object file so if the linker can't find it and it's there ... then your big L setting is wrong.
So your big L should be -L /usr/local/lib
Look at the command Eclipse fires out onto the command line and look for those two.
In vino veritas
modified 14-Nov-16 4:48am.
|
|
|
|
|
Thanks to all, I really appreciate your help.
I did some more messing around and managed to input correct -L using / copying stuff affecting ALL projects. It sort off worked.
Than I did -l and typed cv2.so and the linker could not find it.
I'll try just cv2 without the so extension next.
AS I said , there is an GUI option to select "shared" files so as soon as I can get the linker to work I'll play with that.
I just rebuild another "buidl" using CMake again and will see what I messed up this time.
I'll cannot post the linker output until I have it back working after this new Make, sorry.
|
|
|
|
|
Here is what I am getting,
I need to find out what /ld is , maybe that will give me a clue.
And here is a terrible though - how do I verify that OpenCV will work on Unbutu - 32 bits and Eclipse - also 32 bits?
I can run "hello world", but cannot get the linker to work with OpenCV.
**** Build of configuration Debug for project TEST_1 ****
**** Internal Builder is used for build ****
g++ -L/usr/local/lib -shared -L/media/jim/OpenCL/OpenCV/build/lib -shared -olibTEST_1 src/TEST_1.o -l/cv2 -l/cv2.so -l/media/jim/OpenCL/OpenCV/build/lib/libopencv_flann_pch_dephelp.a -l/media/jim/OpenCL/OpenCV/build/lib/libopencv_videoio.so -l/media/jim/OpenCL/OpenCV/build/lib/libopencv_videoio -llibopencv_videoio
/usr/bin/ld: cannot find -l/cv2
/usr/bin/ld: cannot find -l/cv2.so
/usr/bin/ld: cannot find -l/media/jim/OpenCL/OpenCV/build/lib/libopencv_flann_pch_dephelp.a
/usr/bin/ld: cannot find -l/media/jim/OpenCL/OpenCV/build/lib/libopencv_videoio.so
/usr/bin/ld: cannot find -l/media/jim/OpenCL/OpenCV/build/lib/libopencv_videoio
/usr/bin/ld: cannot find -llibopencv_videoio
collect2: error: ld returned 1 exit status
Build error occurred, build is stopped
Time consumed: 186 ms.
|
|
|
|
|
You only need one of these for cv2
-l/cv2 -l/cv2.so
but as neither is working, try fully qualifying it as a single entry which means use a colon
-l:cv2.so
The reason I think you are having to do that is you have not set GCC command with the -shared cv2.so if you look you have -shared and nothing after it
You have can set the -L directory I don't think the -l command can have directory entries
-L/my/long/directory -lfoo -L/my/other/even/longer/directory -lfoo1
That I believe is how you do library foo & foo1 from different long directories
Edit: I also see above you got the make file sort of working so you must be able to see the actual command lines to the linker.
In vino veritas
modified 14-Nov-16 11:54am.
|
|
|
|
|
Good news,
it linked AFTER I changed the -l to -l:cv2.so
I'll check the GCC linker -l option and try to figure it out.
It seems I should not have to add the .so extension to the file name. But it would not work without it, probably related to -shared option too.
As far as the -shared - it is a common option and I need to find out how it works too.
I beginning to believe the Elipse Settings GUI is not telling the whole story as far as how to use it. There is "Common" window dialog of all the options currently set , but it cannot be edited !
|
|
|
|