Cmake linking to shared library cannot find librar

2019-04-08 04:32发布

问题:

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...

回答1:

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.