В директории /home/karnivaurus/Project
меня есть три файла. У меня есть файл класса Foo.cpp
, файл общей библиотеки libBar.so
и файл CMakeLists.txt
. У меня также есть аналогичная разделяемая библиотека с тем же именем libBar.so
, которая находится в /usr/lib
.
CMakeLists.txt
содержит следующее:
add_library(Foo SHARED Foo.cpp)
target_link_libraries(Foo Bar)
После запуска cmake
библиотека компилируется отлично и создает libFoo.so
. Если я затем запустил команду ldd libFoo.so
, это означает, что существует зависимость от /home/karnivaurus/Project/libBar.so
.
Теперь я меняю вещи и вместо создания общей библиотеки хочу создать исполняемый файл. Итак, я создаю новый файл Main.cpp
, который вызывает функции в Foo.cpp
и меняет CMakeLists.txt
на:
add_executable(Foo Foo.cpp Main.cpp)
target_link_libraries(Foo Bar)
Это компилируется отлично и создает исполняемый файл Foo
. Однако, если я сейчас запускаю ldd Foo
, он говорит мне, что есть зависимость от /usr/lib/libBar.so
.
Поэтому мои вопросы:
1) Почему создание общей библиотеки вызывает зависимость от файла libBar.so
в исходном каталоге, тогда как создание исполняемого файла вызывает зависимость от файла libBar.so
каталоге usr/lib
?
2) Как я могу заставить cmake создать зависимость от одного из них, а не другого?
Это должно сделать ссылку Foo
/home/karnivaurus/Project/libBar.so
:
link_directories( /home/karnivaurus/Project )
add_executable(Foo Foo.cpp Main.cpp)
target_link_libraries(Foo Bar)
Если это не сработает, вы всегда можете добавить абсолютный путь к библиотеке в вызове target_link_libraries
:
target_link_libraries(Foo /home/karnivaurus/Project/libBar.so)