Russian Qt Forum
Март 28, 2024, 11:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибка компиляции LDAP клиента при использовании -std=c++11  (Прочитано 16254 раз)
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« : Май 29, 2015, 17:33 »

Привет. Столкнулся с такой проблемой. Есть библиотека интеграции LDAP в Qt (самописная). Все собиралось и работало до тех пор, пока не задействовал
ключ -std=c++11. После этого все что связанно с ldap не собирается, вылетает куча ошибок следующего характера:

mingw32-make: *** [sub-libs-railcore-make_first] Error 2
mingw32-make: *** Waiting for unfinished jobs....
In file included from ..\..\..\..\work\railroad\libs\ldap_auth\../ldap_auth/cldapauthclient.h:17:0,
                 from ..\..\..\..\work\railroad\libs\ldap_auth\cldapmanager.h:13,
                 from ..\..\..\..\work\railroad\libs\ldap_auth\cldapmanagerfactory.cpp:2:
C:/Qt/Tools/mingw491_32/i686-w64-mingw32/include/winldap.h:773:25: error: expected ')' before '*' token
   typedef ULONG (_cdecl *DBGPRINT)(PCH Format,...);
                         ^
C:/Qt/Tools/mingw491_32/i686-w64-mingw32/include/winldap.h:775:48: error: variable or field 'ldap_set_dbg_routine' declared void
   WINLDAPAPI VOID LDAPAPI ldap_set_dbg_routine(DBGPRINT DebugPrintRoutine);
                                                ^
C:/Qt/Tools/mingw491_32/i686-w64-mingw32/include/winldap.h:775:48: error: 'DBGPRINT' was not declared in this scope
C:/Qt/Tools/mingw491_32/i686-w64-mingw32/include/winldap.h:936:25: error: expected ')' before 'QUERYFORCONNECTION'
   typedef ULONG (_cdecl QUERYFORCONNECTION)(PLDAP PrimaryConnection,PLDAP ReferralFromConnection,PWCHAR NewDN,PCHAR HostName,ULONG PortNumber,PVOID SecAuthIdentity,PVOID CurrentUserToken,PLDAP *ConnectionToUse);
                         ^
C:/Qt/Tools/mingw491_32/i686-w64-mingw32/include/winldap.h:937:27: error: expected ')' before 'NOTIFYOFNEWCONNECTION'
   typedef BOOLEAN (_cdecl NOTIFYOFNEWCONNECTION) (PLDAP PrimaryConnection,PLDAP ReferralFromConnection,PWCHAR NewDN,PCHAR HostName,PLDAP NewConnection,ULONG PortNumber,PVOID SecAuthIdentity,PVOID CurrentUser,ULONG ErrorCodeFromBind);
                           ^
C:/Qt/Tools/mingw491_32/i686-w64-mingw32/include/winldap.h:938:25: error: expected ')' before 'DEREFERENCECONNECTION'
   typedef ULONG (_cdecl DEREFERENCECONNECTION)(PLDAP PrimaryConnection,PLDAP ConnectionToDereference);
                         ^
C:/Qt/Tools/mingw491_32/i686-w64-mingw32/include/winldap.h:942:5: error: 'QUERYFORCONNECTION' does not name a type
     QUERYFORCONNECTION *QueryForConnection;
     ^
C:/Qt/Tools/mingw491_32/i686-w64-mingw32/include/winldap.h:943:5: error: 'NOTIFYOFNEWCONNECTION' does not name a type
     NOTIFYOFNEWCONNECTION *NotifyRoutine;
     ^
C:/Qt/Tools/mingw491_32/i686-w64-mingw32/include/winldap.h:944:5: error: 'DEREFERENCECONNECTION' does not name a type
     DEREFERENCECONNECTION *DereferenceRoutine;
     ^
C:/Qt/Tools/mingw491_32/i686-w64-mingw32/include/winldap.h:954:27: error: expected ')' before 'QUERYCLIENTCERT'
   typedef BOOLEAN (_cdecl QUERYCLIENTCERT) (PLDAP Connection,PSecPkgContext_IssuerListInfoEx trusted_CAs,PCCERT_CONTEXT *ppCertificate);
                           ^
C:/Qt/Tools/mingw491_32/i686-w64-mingw32/include/winldap.h:955:27: error: expected ')' before 'VERIFYSERVERCERT'
   typedef BOOLEAN (_cdecl VERIFYSERVERCERT) (PLDAP Connection,PCCERT_CONTEXT pServerCert);
                           ^
..\..\..\..\work\railroad\libs\ldap_auth\cldapmanagerfactory.cpp: In member function 'virtual void CLDAPManagerFactory::createGlobalObject()':
..\..\..\..\work\railroad\libs\ldap_auth\cldapmanagerfactory.cpp:36:56: error: invalid new-expression of abstract class type 'CLDAPManager'
        CLDAPManager::p_instance = new CLDAPManager(this);
                                                        ^
In file included from ..\..\..\..\work\railroad\libs\ldap_auth\cldapmanagerfactory.cpp:2:0:
..\..\..\..\work\railroad\libs\ldap_auth\cldapmanager.h:16:30: note:   because the following virtual functions are pure within 'CLDAPManager':
 class LDAP_AUTHSHARED_EXPORT CLDAPManager : public CGlobalObject
                              ^
In file included from ..\..\..\..\work\railroad\libs\ldap_auth\cldapmanager.h:12:0,
                 from ..\..\..\..\work\railroad\libs\ldap_auth\cldapmanagerfactory.cpp:2:

Весь проект уже перенесен под использование этих расширений, а тут такой облом. Выяснилось это поздно потому что основное время
работаю под линуксом. Под виндой собирались версии без использования LDAP. Но нужно собрать также с его использованием. Откатываться назад не хочу. Можно как то побороть?
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #1 : Май 29, 2015, 17:59 »

Разобрался. Почему то эти функции на которые ругается компилятор описаны с аттрибутом _cdecl (одно подчеркивание). И новый компилятор этот атрибут в упор не видит.
Добавил строки
Код:
#ifndef _cdecl
#define _cdecl __cdecl //то что я добавил перед include
#endif

#include <winldap.h>
#include <winber.h>
#include <rpc.h>
#include <rpcdce.h>
и все собралось. Бред.
Записан
AzazelloAV
Гость
« Ответ #2 : Май 30, 2015, 23:59 »

Интересную тему подняли. Не в плане, конечно, компиляции.
Расскажите, если не жалко, какую нишу хотите занять. Я так понимаю вы "один в поле воин", что может быть недостатком как и преимуществом. К чему я? На самом деле конечных нормальных продуктов, качественных клиентов для LDAP я не встречал, поэтому интересует ваше направление.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #3 : Май 31, 2015, 10:54 »

да простят модераторы за небольшой оффтоп. Пишется промышленно ПО. Клиент потребовал поддержку авторизации в active direvtory, так как у них все на нем держится. Раньше никогда с этим дело не имел, но вот столкнулся.
Готовых решений для Qt не нашлось, пришлось писать свое. Но мне достаточно пока просто проверка имени/пароля и принадлежность юзера к определенной группе. хотя в будущем по идее будет проверка прав пользователя на каждую операцию. Для отладки программа пишется без LDAP (вырезано ifdef-ами).
Записан
AzazelloAV
Гость
« Ответ #4 : Май 31, 2015, 12:45 »

да простят модераторы за небольшой оффтоп. Пишется промышленно ПО. Клиент потребовал поддержку авторизации в active direvtory

Понятно, частное решение для конкретной задачи. Хотя мне не понятно, причем здесь авторизация актив директори и лдап.  Т.е. вы напрямую решили обойти ай-пи актив директори, работая напрямую с базой лдап? Также интересует кросплатформенность, которая отсутсвует в лдап (в плане наявности библиотек, а не описания протокола). Вы используете API Windows, OpenLdap или свою реализацию? Если не жалко, ответте, т.к. темой LDAP интересуюсь давно, но кроме мысли реализации своего клиента на уровне сокетов ничего другого не приходит.
« Последнее редактирование: Май 31, 2015, 12:49 от AzazelloAV » Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #5 : Июнь 02, 2015, 10:21 »

Использую winAPI в обертке своего класса (через фасад решил сделать). напрямую я никуда не подключаюсь, все через winapi по примерам с msdn. В целом все работает как надо.
Программа должна проверять кто с ней работает и соотвественно проверять права на те или иные операции пользователя + выдавать некоторые данные, такие как ФИО и прочее.
По поводу кроссплатформенности - задачи как таковой что бы авторизация АД работала в линуксе нет, так как используются виндовые клиенты у этого заказчика. Все клиентские машины уже
в домене, поэтому такие и требования, хотя по факту сейчас на сколько я помню у них установлена версия без LDAP (сами же и попросили).
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3257


Просмотр профиля
« Ответ #6 : Июнь 03, 2015, 16:50 »

Вообще, было бы неплохо обернуть сишную лдаповскую либу в кутишный интерфейс (добавить асинхронности и сигналов). Могу рассказать подробнее в ИМ каком-нибудь. Вопрос в том - надо ли это кому-либо?)
Записан
Bepec
Гость
« Ответ #7 : Июнь 03, 2015, 17:04 »

оффтоп: много раз такой же вопрос приходил на ум. Пару тройку оберток сделал - раз в месяц кто то качал. Плюнул я на это дело Веселый
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.055 секунд. Запросов: 23.