Я хотел бы использовать GPGME для генерации ключей и шифрования в моем приложении C++. Однако, пытаясь начать, я застрял с проблемой:
Я загрузил пакет dev для своей системы Debian. Я сказал своему компилятору как найти библиотеку. Просто чтобы посмотреть, смогу ли я инициализировать библиотеку (упомянутый здесь) Я пытаюсь выполнить следующий код..:
//--- Main.cpp---
#include <locale.h>
#include <gpgme.h>
int main(){
/* Initialize the locale environment. */
setlocale (LC_ALL, "");
gpgme_check_version (NULL);
gpgme_set_locale (NULL, LC_CTYPE, setlocale (LC_CTYPE, NULL));
#ifdef LC_MESSAGES
gpgme_set_locale (NULL, LC_MESSAGES, setlocale (LC_MESSAGES, NULL));
#endif
return 0;
}
линия
gpgme_set_locale (NULL, LC_CTYPE, setlocale (LC_CTYPE, NULL));
подчеркнуто красным создателем qt. Сообщение
ожидаемый токен ';' получил «структуру»
Но почему?
JFYI
В качестве синопсиса моей более ранней проблемы мои CMakeLists выглядят так:
Мой основной файл CMakeLists.txt в корневом каталоге моего проекта:
//...
include(FeatureSummary)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
find_package(Gpgme)
# Additional include directories
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}
${GPGME_INCLUDES}
)
ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/application/framework/impl)
И файл CMakeLists.txt в подкаталоге application/framework/impl:
# Define name of component
SET(COMPONENT_NAME framework)
# Define set of source files for library
SET(comp_src
//... well, the sources
)
add_executable(${COMPONENT_NAME} ${comp_src})
target_link_libraries(${COMPONENT_NAME} ${GPGME_VANILLA_LIBRARIES})
ОБНОВЛЕНИЕ
Если я не рекомендую строку
//gpgme_check_version (NULL);
сообщение исчезает. Я проверил документацию. Сигнатура метода должна быть действительной. Может быть, что-то не так с версией библиотеки, которую я использую?
ИЗМЕНИТЬ:
Это не ошибка компилятора, а просто красная метка, поставленная создателем qt. Я бы предположил, что это должно быть вызвано опечаткой или чем-то еще. Но я не вижу никакой опечатки. Более того, приложение компилируется и запускается, даже если я не закомментировал строку check_version
.
main()
? Там есть два вызова функций, какой из двух вызовов вызывает ошибку компилятора? Что, если вы сначала сохраните параметры во временных файлах? Я уверен, что заголовок отсутствует, и если бы вы потратили время на создание минимального примера, вы пришли бы к такому же выводу. - person Ulrich Eckhardt   schedule 06.01.2016