Reputation: 24111
On Ubuntu, I have two directories: build
and src
. In src
, my CMakeLists.txt
file has the lines:
add_executable(Test main.cpp)
target_link_libraries(Test libCamera.so)
After running cmake in the build directory (cmake ../src
), I then copy my library file libCamera.so
into the build directory. After running make, the main.cpp.o
file compiles successfully, but I receive the following error during linking:
/usr/bin/ld: cannot find -lCamera
Why is this? The shared library is in the same directory that I am building in... and the same thing happens if I copy the library to /usr/bin
...
Upvotes: 7
Views: 22488
Reputation: 44238
You should not put prefix lib
and suffix .so
of the library, so just use:
target_link_libraries(Test Camera)
if your library not found you may need to add directory, where library is located:
link_directories( /home/user/blah ) # for specific path
link_directories( ${CMAKE_CURRENT_BINARY_DIR} ) # if you put library where binary is generated
Note: you copied lib to /usr/bin
but unlike Windows where dll files stored with executables, in Linux that is not the case, so it would be /usr/lib
, not /usr/bin
. Also you may change LD_LIBRARY_PATH
variable to make your program to find a library in a custom location.
Upvotes: 4