Intereting Posts
Как получить размер динамически (используя malloc или calloc) выделенную память? ОК, чтобы скопировать CRITICAL_SECTION? opendir: Слишком много открытых файлов Удаление символа из файла в C Почему разрешено перезаписывать переменную const с помощью указателя на нее с помощью memcpy? Как работает gethostbyname () или getnameinfo () в фоновом режиме? Разрешение предупреждения о преобразовании в составном назначении Где я могу найти простую графическую библиотеку C для записи непосредственно на фрейм? Невозможно включить или использовать межъядерный модуль (модули) pass block как аргумент макроса в C найти уникальные пифагорейские троицы Найти максимум три числа в C без использования условного оператора и тройного оператора совместимость c-fortran – производные типы с указателями Доступ к элементам матрицы по ряду столбцов и столбцам Способ преобразования streamа байтов в stream пакетов в C89 на встроенном устройстве

Невозможно скомпилировать приложение ac, которое считывает смарт-карту

Я пытаюсь скомпилировать пример приложения c, который использует pkcs # 11, чтобы найти все закрытые ключи в токене и распечатать их ярлык и идентификатор, но получить следующие ошибки

/tmp/ccAqQ7UI.o: In function initialize': pkcs11_example1.c:(.text+0x8e5): undefined reference to C_Initialize' /tmp/ccAqQ7UI.o: In function `get_slot': 

Пример взят отсюда

с помощью следующей команды;

  `gcc pkcs11_example1.c -o slots -L /usr/lib/opensc-pkcs11.so` 

Я не уверен, какую библиотеку я должен связывать после -L. Может ли кто-нибудь руководствовать, как скомпилировать это, и есть ли некоторые библиотеки, необходимые для связи.

C_Initialize и другие 60+ функций с префиксом «C_» – это функции криптоки, определенные в спецификации PKCS # 11 . Они обычно реализуются в автономной библиотеке, предоставляемой поставщиком HSM. Глядя на ваши образцы кода, я бы сказал, что вам нужно напрямую связать библиотеку PKCS # 11, или вы можете изменить код для динамической загрузки библиотеки PKCS # 11 во время выполнения с помощью LoadLibrary или dlopen, а затем получить указатели на все функции криптоки через вызов C_GetFunctionList , Вы также можете посмотреть на pkcs11-logger исходный код для примера о том, как это сделать.

Команда link, которую вы даете, gcc pkcs11_example1.c -o slots -L /usr/lib/opensc-pkcs11.so , неверна.

  • -L принимает только путь, который добавляется к путям, в которых выполняется поиск libs, но /usr/lib по умолчанию, поэтому вам не нужен этот переключатель вообще.

  • Вам не хватает -l , который принимает имя библиотеки без префикса lib или .so- суффикса, поэтому похоже, что вам нужен -lopensc-pkcs11 .

Итак, сначала убедитесь, что ваш файл библиотеки действительно является /usr/lib/libopensc-pkcs11.so (обратите внимание на префикс!), Возможно, с приведенными номерами версий. Затем измените параметры сборки, чтобы команда link

 gcc pkcs11_example1.c -o slots -lopensc-pkcs11