clang: error: команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v для просмотра вызова) при компоновке библиотеки в cmake - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь связать эту библиотеку с моим проектом, я использую CLion в качестве своей IDE и CMake для связи.Я пытался следовать всем видам учебников, но безрезультатно.Есть ли другой способ сделать это?Я новичок в C ++, и я из более высокого уровня языка.Заранее спасибо

CMakeLists.txt:

cmake_minimum_required(VERSION 3.12)

project(psapitest)

add_library(
    psmoveapi-lib
    ${PROJECT_SOURCE_DIR}/main.cpp
    ${PROJECT_SOURCE_DIR}/psmoveapi/build/psmove_config.h
    ${PROJECT_SOURCE_DIR}/psmoveapi/include/psmove.h
)

add_executable(test-app main.cpp)

target_link_libraries(test-app PRIVATE psmoveapi-lib)

Структура проекта: enter image description here

Ошибка консоли:

====================[ Build | test-app | Debug ]================================
 /Applications/CLion.app/Contents/bin/cmake/mac/bin/cmake --build.    /Users/admin/CLionProjects/psapitest/build --target test-app -- -j 2
Scanning dependencies of target psmoveapi-lib
[ 25%] Building CXX object CMakeFiles/psmoveapi-lib.dir/main.cpp.o
[ 50%] Linking CXX static library libpsmoveapi-lib.a
[ 50%] Built target psmoveapi-lib
Scanning dependencies of target test-app
[ 75%] Building CXX object CMakeFiles/test-app.dir/main.cpp.o
[100%] Linking CXX executable test-app
Undefined symbols for architecture x86_64:
  "_psmove_connect", referenced from:
  _main in main.cpp.o
  "_psmove_connection_type", referenced from:
  _main in main.cpp.o
  "_psmove_count_connected", referenced from:
  _main in main.cpp.o
  "_psmove_disconnect", referenced from:
  _main in main.cpp.o
  "_psmove_get_accelerometer", referenced from:
  _main in main.cpp.o
   "_psmove_get_battery", referenced from:
  _main in main.cpp.o
  "_psmove_get_buttons", referenced from:
  _main in main.cpp.o
  "_psmove_get_gyroscope", referenced from:
  _main in main.cpp.o
  "_psmove_get_magnetometer", referenced from:
  _main in main.cpp.o
  "_psmove_get_serial", referenced from:
  _main in main.cpp.o
 "_psmove_get_temperature", referenced from:
  _main in main.cpp.o
  "_psmove_get_temperature_in_celsius", referenced from:
  _main in main.cpp.o
  "_psmove_get_trigger", referenced from:
  _main in main.cpp.o
  "_psmove_init", referenced from:
  _main in main.cpp.o
  "_psmove_poll", referenced from:
  _main in main.cpp.o
  "_psmove_set_leds", referenced from:
  _main in main.cpp.o
  "_psmove_set_rumble", referenced from:
  _main in main.cpp.o
  "_psmove_update_leds", referenced from:
  _main in main.cpp.o
  "_psmove_util_sleep_ms", referenced from:
  _main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [test-app] Error 1
make[2]: *** [CMakeFiles/test-app.dir/all] Error 2
make[1]: *** [CMakeFiles/test-app.dir/rule] Error 2
make: *** [test-app] Error 2

1 Ответ

0 голосов
/ 22 февраля 2019

Один из способов ссылки на другой проект CMake - добавить его в дерево исходных текстов (которое вы уже сделали) и включить в свой проект CMake с помощью команды add_subdirectory.В вашем случае вы напишите

add_subdirectory(psmoveapi)

. Подкаталог будет наследовать переменные CMake из каталога, в котором он находится, что означает, что он будет собран с тем же компилятором и настройками, если они не будут явно переопределены.Если позже вы обнаружите, что проекту необходимо, чтобы вы настроили некоторые переменные CMake, вы set измените их до add_subdirectory.

Затем вы сможете использовать все цели, определенные в этом подкаталоге.Вам нужно выяснить, какая цель соответствует библиотеке, на которую вы хотите связать, либо просматривая документы, либо ища команды add_library в скриптах CMake.Этот конкретный проект, кажется, определяет цель под названием psmoveapi, поэтому вы будете ссылаться на него следующим образом:

target_link_libraries(your-program PRIVATE psmoveapi)

В принципе, если цель библиотеки настроена правильно, это автоматически позаботитсяиз путей включения, дополнительных обязательных библиотек и т. д., но на практике вам может потребоваться настроить их самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...