Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CMake error: linker command failed with exit code 1 and cpp.o files

I am using CMake to compile a small project.

Here is what I have written in CMakeLists.txt:

cmake_minimum_required(VERSION 3.2)
set (CMAKE_CXX_STANDARD 11)
project(DAF)

find_package(OpenCV REQUIRED)


include_directories(include)
include_directories(${OpenCV_INCLUDE_DIRS} )


file(GLOB Src_Sources "src/*.cpp")
file(GLOB Test_Sources "test/*.cpp")


add_executable(executable ${Src_Sources} ${Test_Sources})

target_link_libraries( executable include ${OpenCV_LIBS} )

I have two directories src and test. The src directory contains only the files that hold the functions, whereas the test directory contains the main file.

Once I use the cmake command and then the make command I get this error:

Scanning dependencies of target executation
[ 25%] Building CXX object CMakeFiles/executation.dir/src/image.cpp.o
[ 50%] Building CXX object CMakeFiles/executation.dir/test/starter_1.cpp.o
[ 75%] Linking CXX executable executation
ld: library not found for -linclude
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [executation] Error 1
make[1]: *** [CMakeFiles/executation.dir/all] Error 2
make: *** [all] Error 2 

So what I find strange is that it creates .cpp.o files. Is that normal?

And then how do I fix the error library not found for -linclude?

like image 816
John Mayne Avatar asked Jun 19 '26 04:06

John Mayne


1 Answers

Yes, it is normal for CMake to take the name of the source file, and append a .o when compiling the respective object files. For example, the source file image.cpp will be compiled into image.cpp.o. The Makefiles generated by CMake will contain a unique target <someSourceFileName>.o for each source file, where <someSourceFileName> can be a .cc, .cpp, .c, etc.

The error:

ld: library not found for -linclude

indicates that you have tried to link a library called include to the executable. This is likely not what you intend. It appears include is actually your include directory, and you have already specified the include directories in your CMake with this line:

include_directories(include)

To remove the error, just take out the include from the target_link_libraries() command, like so:

target_link_libraries( executable ${OpenCV_LIBS} )
like image 127
Kevin Avatar answered Jun 20 '26 19:06

Kevin



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!