qxmpp-project / qxmpp

Cross-platform C++ XMPP client and server library
400 stars 198 forks source link

Undefined reference when trying to compile #610

Closed lipiri closed 3 months ago

lipiri commented 3 months ago

Hello. I have a problem when trying to compile simple programs using qxmpp, such as the provided example 0. This is my environment:

lipiri commented 3 months ago

I am glad to announce that I have solved this problem. Silly me had forgotten to add the library on Qt Creator. However, there is another problem I found related to compiling qxmpp itself I want to report. When compiling with -DBUILD_OMEMO=ON, I get these warnings:

[197/454] Building CXX object src/omemo/CMakeFiles/QXmppOmemoQt6.dir/QXmppOmemoManager_p.cpp.obj
D:/Desktop/qxmpp-1.6.0/src/omemo/QXmppOmemoManager_p.cpp:231:6: warning: 'bool QXmppOmemoManagerPrivate::initGlobalContext()' redeclared without dllimport attribute after being referenced with dll linkage
  231 | bool ManagerPrivate::initGlobalContext()
      |      ^~~~~~~~~~~~~~
D:/Desktop/qxmpp-1.6.0/src/omemo/QXmppOmemoManager_p.cpp:249:6: warning: 'bool QXmppOmemoManagerPrivate::initLocking()' redeclared without dllimport attribute after being referenced with dll linkage
  249 | bool ManagerPrivate::initLocking()
      |      ^~~~~~~~~~~~~~
D:/Desktop/qxmpp-1.6.0/src/omemo/QXmppOmemoManager_p.cpp:276:6: warning: 'bool QXmppOmemoManagerPrivate::initCryptoProvider()' redeclared without dllimport attribute after being referenced with dll linkage
  276 | bool ManagerPrivate::initCryptoProvider()
      |      ^~~~~~~~~~~~~~

Later, compilation fails with this error:

[454/454] Linking CXX executable tests\tst_qxmppomemomanager.exe
FAILED: tests/tst_qxmppomemomanager.exe
C:\Windows\system32\cmd.exe /C "cd . && C:\msys64\mingw64\bin\c++.exe   tests/CMakeFiles/tst_qxmppomemomanager.dir/tst_qxmppomemom
anager_autogen/mocs_compilation.cpp.obj tests/CMakeFiles/tst_qxmppomemomanager.dir/qxmppomemomanager/tst_qxmppomemomanager.cpp.obj
 -o tests\tst_qxmppomemomanager.exe -Wl,--out-implib,tests\libtst_qxmppomemomanager.dll.a -Wl,--major-image-version,0,--minor-imag
e-version,0  C:/msys64/mingw64/lib/libQt6Test.dll.a  src/omemo/libQXmppOmemoQt6.dll.a  src/libQXmppQt6.dll.a  C:/msys64/mingw64/li
b/libQt6Network.dll.a  -lws2_32  C:/msys64/mingw64/lib/libQt6Xml.dll.a  C:/msys64/mingw64/lib/libqca-qt6.dll.a  C:/msys64/mingw64/
lib/libQt6Core.dll.a  -lmpr  -luserenv  C:/msys64/mingw64/lib/libomemo-c.dll.a  C:/msys64/mingw64/lib/libprotobuf-c.dll.a  -lkerne
l32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: tests/CMakeFiles/tst_qxmppom
emomanager.dir/qxmppomemomanager/tst_qxmppomemomanager.cpp.obj:tst_qxmppomemomanager.cpp:(.text+0xe93): undefined reference to `__
imp__ZN24QXmppOmemoManagerPrivate17initGlobalContextEv'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: tests/CMakeFiles/tst_qxmppom
emomanager.dir/qxmppomemomanager/tst_qxmppomemomanager.cpp.obj:tst_qxmppomemomanager.cpp:(.text+0xef3): undefined reference to `__
imp__ZN24QXmppOmemoManagerPrivate11initLockingEv'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: tests/CMakeFiles/tst_qxmppom
emomanager.dir/qxmppomemomanager/tst_qxmppomemomanager.cpp.obj:tst_qxmppomemomanager.cpp:(.text+0xf50): undefined reference to `__
imp__ZN24QXmppOmemoManagerPrivate18initCryptoProviderEv'
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

Building without tests succeeds, but I think that might not be good.