Closed probonopd closed 1 year ago
make --trace
output:
[ 66%] Linking CXX executable QtZeroConfExample
cd /tmp/QtZeroConf/build/example && /usr/local/bin/cmake -E cmake_link_script CMakeFiles/QtZeroConfExample.dir/link.txt --verbose=
/usr/local/bin/x86_64-unknown-freebsd13.1-ld: CMakeFiles/QtZeroConfExample.dir/QtZeroConfExample_autogen/mocs_compilation.cpp.o: in function `mainWindow::~mainWindow()':
mocs_compilation.cpp:(.text._ZN10mainWindowD2Ev[_ZN10mainWindowD2Ev]+0x38): undefined reference to `QZeroConf::~QZeroConf()'
/usr/local/bin/x86_64-unknown-freebsd13.1-ld: CMakeFiles/QtZeroConfExample.dir/window.cpp.o: in function `mainWindow::mainWindow()':
window.cpp:(.text+0x92): undefined reference to `QZeroConf::QZeroConf(QObject*)'
/usr/local/bin/x86_64-unknown-freebsd13.1-ld: window.cpp:(.text+0x27c): undefined reference to `QZeroConf::~QZeroConf()'
/usr/local/bin/x86_64-unknown-freebsd13.1-ld: CMakeFiles/QtZeroConfExample.dir/window.cpp.o: in function `mainWindow::stopPublishClicked()':
window.cpp:(.text+0x1016): undefined reference to `QZeroConf::stopServicePublish()'
/usr/local/bin/x86_64-unknown-freebsd13.1-ld: CMakeFiles/QtZeroConfExample.dir/window.cpp.o: in function `mainWindow::appStateChanged(Qt::ApplicationState)':
window.cpp:(.text+0x11ba): undefined reference to `QZeroConf::stopServicePublish()'
/usr/local/bin/x86_64-unknown-freebsd13.1-ld: window.cpp:(.text+0x11c7): undefined reference to `QZeroConf::stopBrowser()'
/usr/local/bin/x86_64-unknown-freebsd13.1-ld: window.cpp:(.text+0x11f4): undefined reference to `QZeroConf::publishExists()'
/usr/local/bin/x86_64-unknown-freebsd13.1-ld: window.cpp:(.text+0x1212): undefined reference to `QZeroConf::browserExists()'
/usr/local/bin/x86_64-unknown-freebsd13.1-ld: CMakeFiles/QtZeroConfExample.dir/window.cpp.o: in function `mainWindow::startPublish()':
window.cpp:(.text+0x12c0): undefined reference to `QZeroConf::clearServiceTxtRecords()'
/usr/local/bin/x86_64-unknown-freebsd13.1-ld: window.cpp:(.text+0x12f6): undefined reference to `QZeroConf::addServiceTxtRecord(QString, QString)'
/usr/local/bin/x86_64-unknown-freebsd13.1-ld: window.cpp:(.text+0x133a): undefined reference to `QZeroConf::addServiceTxtRecord(QString)'
/usr/local/bin/x86_64-unknown-freebsd13.1-ld: window.cpp:(.text+0x13a9): undefined reference to `QZeroConf::startServicePublish(char const*, char const*, char const*, unsigned short)'
/usr/local/bin/x86_64-unknown-freebsd13.1-ld: CMakeFiles/QtZeroConfExample.dir/window.cpp.o: in function `QZeroConf::startBrowser(QString)':
window.cpp:(.text._ZN9QZeroConf12startBrowserE7QString[_ZN9QZeroConf12startBrowserE7QString]+0x2c): undefined reference to `QZeroConf::startBrowser(QString, QAbstractSocket::NetworkLayerProtocol)'
/usr/local/bin/x86_64-unknown-freebsd13.1-ld: ../libQtZeroConf.a(mocs_compilation.cpp.o):(.data.rel.ro+0x88): undefined reference to `QZeroConf::~QZeroConf()'
/usr/local/bin/x86_64-unknown-freebsd13.1-ld: ../libQtZeroConf.a(mocs_compilation.cpp.o):(.data.rel.ro+0x90): undefined reference to `QZeroConf::~QZeroConf()'
c++: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [example/CMakeFiles/QtZeroConfExample.dir/build.make:134: example/QtZeroConfExample] Error 1
make[1]: *** [CMakeFiles/Makefile2:155: example/CMakeFiles/QtZeroConfExample.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
FreeBSD% cat ./example/CMakeFiles/QtZeroConfExample.dir/link.txt
/usr/bin/c++ CMakeFiles/QtZeroConfExample.dir/QtZeroConfExample_autogen/mocs_compilation.cpp.o CMakeFiles/QtZeroConfExample.dir/window.cpp.o CMakeFiles/QtZeroConfExample.dir/main.cpp.o -o QtZeroConfExample -Wl,-rpath,/usr/local/lib/qt5:/usr/local/lib ../libQtZeroConf.a /usr/local/lib/qt5/libQt5Widgets.so.5.15.5 /usr/local/lib/qt5/libQt5Network.so.5.15.5 /usr/local/lib/qt5/libQt5Gui.so.5.15.5 /usr/local/lib/qt5/libQt5Core.so.5.15.5 -Wl,-rpath-link,/usr/local/lib
If one removes he if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
condition in CMakeLists.txt
(or changes it to also cover FreeBSD), then the situation improves somewhat:
FreeBSD% LANG=C make
[ 9%] Automatic MOC for target QtZeroConf
[ 9%] Built target QtZeroConf_autogen
Consolidate compiler generated dependencies of target QtZeroConf
[ 54%] Built target QtZeroConf
[ 63%] Automatic MOC and UIC for target QtZeroConfExample
[ 63%] Built target QtZeroConfExample_autogen
Consolidate compiler generated dependencies of target QtZeroConfExample
[ 72%] Linking CXX executable QtZeroConfExample
/usr/local/bin/x86_64-unknown-freebsd13.1-ld: ../libQtZeroConf.a(qt-watch.cpp.o): undefined reference to symbol 'avahi_age'
/usr/local/bin/x86_64-unknown-freebsd13.1-ld: /usr/local/lib/libavahi-common.so.3: error adding symbols: DSO missing from command line
c++: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [example/CMakeFiles/QtZeroConfExample.dir/build.make:135: example/QtZeroConfExample] Error 1
make[1]: *** [CMakeFiles/Makefile2:155: example/CMakeFiles/QtZeroConfExample.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
The symbol in question seems to be coming from avahi-common
:
FreeBSD% grep -r avahi_age /usr/local/include
/usr/local/include/avahi-common/timeval.h:AvahiUsec avahi_age(const struct timeval *a);
Turns out that /tmp/QtZeroConf/build/example/CMakeFiles/QtZeroConfExample.dir/link.txt
is missing /usr/local/lib/libavahi-common.so
. Manually adding it works as a workaround. Probably libavahi-common
must be added somewhere in CMake.
Thanks @jbagg, tested, works :+1:
Cannot build example on FreeBSD with
-DBUILD_EXAMPLE=1
: