open-eid / DigiDoc4-Client

DigiDoc4 Client is an application for digitally signing and encrypting documents; the software includes functionality to manage Estonian ID-card - change pin codes etc.
https://www.id.ee/en/article/install-id-software/
Other
116 stars 41 forks source link

Error: expected class-name before ‘{’ token #1240

Closed pifagor87 closed 1 week ago

pifagor87 commented 6 months ago

I use Ubuntu 22.04.3 LTS When I run cmake -B build -S . Everything works well. When I run cmake --build build I get errors Building CXX object client/CMakeFiles/qdigidoc4.dir/DigiDoc.cpp.o /home/pifagor/DigiDoc4-Client/client/DigiDoc.cpp:50:1: error: expected class-name before ‘{’ token 50 | { | ^ /home/pifagor/DigiDoc4-Client/client/DigiDoc.cpp:53:14: error: ‘bool ServiceConfirmation::validateOnline() const’ marked ‘final’, but is not virtual 53 | bool validateOnline() const final { | ^~~~~~~~~~~~~~ /home/pifagor/DigiDoc4-Client/client/DigiDoc.cpp: In lambda function: /home/pifagor/DigiDoc4-Client/client/DigiDoc.cpp:518:47: error: no matching function for call to ‘digidoc::Container::openPtr(std::string, ServiceConfirmation*)’ 518 | b = Container::openPtr(to(file), &cb); | ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~ In file included from /home/pifagor/DigiDoc4-Client/client/DigiDoc.h:24, from /home/pifagor/DigiDoc4-Client/client/DigiDoc.cpp:20: /usr/include/digidocpp/Container.h:68:39: note: candidate: ‘static std::unique_ptr<digidoc::Container> digidoc::Container::openPtr(const string&)’ 68 | static std::unique_ptr<Container> openPtr(const std::string &path); | ^~~~~~~ /usr/include/digidocpp/Container.h:68:39: note: candidate expects 1 argument, 2 provided /home/pifagor/DigiDoc4-Client/client/DigiDoc.cpp:532:110: error: no matching function for call to ‘digidoc::Container::openPtr(std::string, ServiceConfirmation*)’ 532 | parentContainer = std::exchange(b, Container::openPtr(to(tmppath), &cb)); | ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~ In file included from /home/pifagor/DigiDoc4-Client/client/DigiDoc.h:24, from /home/pifagor/DigiDoc4-Client/client/DigiDoc.cpp:20: /usr/include/digidocpp/Container.h:68:39: note: candidate: ‘static std::unique_ptr<digidoc::Container> digidoc::Container::openPtr(const string&)’ 68 | static std::unique_ptr<Container> openPtr(const std::string &path); | ^~~~~~~ /usr/include/digidocpp/Container.h:68:39: note: candidate expects 1 argument, 2 provided gmake[2]: *** [client/CMakeFiles/qdigidoc4.dir/build.make:999: client/CMakeFiles/qdigidoc4.dir/DigiDoc.cpp.o] Error 1 gmake[1]: *** [CMakeFiles/Makefile2:324: client/CMakeFiles/qdigidoc4.dir/all] Error 2 gmake: *** [Makefile:156: all] Error 2

metsma commented 6 months ago

You need update libdigidocpp code

pifagor87 commented 6 months ago

Hello @metsma , thanks for the answer I install libdigidocpp, and then use " /usr/local/bin/digidoc-tool" I get /usr/local/bin/digidoc-tool: symbol lookup error: /usr/local/bin/digidoc-tool: undefined symbol: _ZN7digidoc9Container7openPtrERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_15ContainerOpenCBE Versions

libxml-security-c20: Installed: 2.0.4-4RIA0 Candidate: 2.0.4-4RIA0 Version table: *** 2.0.4-4RIA0 500 500 https://installer.id.ee/media/ubuntu jammy/main amd64 Packages 100 /var/lib/dpkg/status 2.0.4-1build1 500 500 http://ua.archive.ubuntu.com/ubuntu jammy/universe amd64 Package

and

libdigidocpp1: Installed: 3.16.0.1442-2204 Candidate: 3.16.0.1442-2204 Version table: *** 3.16.0.1442-2204 500 500 https://installer.id.ee/media/ubuntu jammy/main amd64 Packages 100 /var/lib/dpkg/status

After I use in DigiDoc4-Client cmake --build build I get a new error

Linking CXX executable qdigidoc4 /usr/bin/ld: /tmp/cc8FZ0wb.ltrans4.ltrans.o: in function `DigiDoc::open(QString const&)::{lambda()#1}::operator()() const':

:(.text+0x127351): undefined reference to `digidoc::Container::openPtr(std::__cxx11::basic_string, std::allocator > const&, digidoc::ContainerOpenCB*)' /usr/bin/ld: :(.text+0x12777f): undefined reference to `digidoc::Container::openPtr(std::__cxx11::basic_string, std::allocator > const&, digidoc::ContainerOpenCB*)' collect2: error: ld returned 1 exit status gmake[2]: *** [client/CMakeFiles/qdigidoc4.dir/build.make:1504: client/qdigidoc4] Error 1 gmake[1]: *** [CMakeFiles/Makefile2:324: client/CMakeFiles/qdigidoc4.dir/all] Error 2 gmake: *** [Makefile:156: all] Error 2
metsma commented 6 months ago

/usr/local/bin/digidoc-tool: symbol lookup error: /usr/local/bin/digidoc-tool: undefined symbol: _ZN7digidoc9Container7openPtrERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS_15ContainerOpenCBE Versions

This hints that you have built digidoc-tool from source and libdigidocpp.1 libarary is not to up to date. Probably you need run sudo ldconfig or the /usr/local/lib is not in ld.config

kristelmerilain commented 1 week ago

Closing due inactivity, reopen if needed.