Я пытаюсь разработать программу, которая взаимодействует с USB-ридером PCS C с помощью Conan и CMake с библиотекой LibLogicalAccess. Я выполнил инструкции по сборке и установке библиотеки, которые, казалось, прошли нормально. Я создал небольшой простой консольный проект с файлом «main. cpp». Следуя руководству C ++ в wiki библиотеки, я попытался вызвать функцию из библиотеки, которая привела к «Неопределенной ссылке на function . Я знаю, что есть много тем, охватывающих это, но я прочитал столько, сколько мог, но, похоже, не нашел правильного решения.
У меня нет большого опыта работы с Ubuntu / CMake / Conan / C ++, так что это может быть очень простой fix.
ОС: Kubuntu 18.04 Язык: C ++ Связанное программное обеспечение: LibLogicalAccess 2.2.1, CMake 3.17.1, Conan 1.25.0
main. cpp
#include <iostream>
#include <logicalaccess/dynlibrary/librarymanager.hpp>
#include <logicalaccess/readerproviders/readerconfiguration.hpp>
#include <logicalaccess/cards/chip.hpp>
int main()
{
std::cout << "Program started\n";
// Reader configuration object to store reader provider and reader unit selection.
std::shared_ptr<logicalaccess::ReaderConfiguration> readerConfig(new logicalaccess::ReaderConfiguration());
// Set PCSC ReaderProvider by calling the Library Manager which will load the function from the corresponding plug-in
readerConfig->setReaderProvider(logicalaccess::LibraryManager::getInstance()->getReaderProvider("PCSC"));
std::cout << "after..\n";
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
project(project)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup(TARGETS)
set(CMAKE_CXX_FLAGS "-I /usr/include/PCSC")
add_executable(project main.cpp)
target_link_libraries(project PUBLIC CONAN_PKG::LogicalAccess)
Когда я пытаюсь построить программу, используя cmake --build .
, это результат:
[100%] Linking CXX executable bin/project
CMakeFiles/project.dir/main.cpp.o: In function `main':
main.cpp:(.text+0x140): undefined reference to `logicalaccess::LibraryManager::getReaderProvider(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: error: ld returned 1 exit status
CMakeFiles/project.dir/build.make:191: recipe for target 'bin/project' failed
make[2]: *** [bin/project] Error 1
CMakeFiles/Makefile2:95: recipe for target 'CMakeFiles/project.dir/all' failed
make[1]: *** [CMakeFiles/project.dir/all] Error 2
Makefile:103: recipe for target 'all' failed
make: *** [all] Error 2
Странно то, что первая строка кода: std::shared_ptr<logicalaccess::ReaderConfiguration> readerConfig(...)
работает нормально, а вторая строка кода дает неопределенную ссылку.
Я пробовал другие функции в том же файле, которые дают тот же результат. файл компилируется и работает нормально, когда я удаляю последнюю строку "setReaderProvider" кода. Также пробовал много разных мелких корректировок, касающихся conanfile.txt и CMakeLists.txt.