Bug 428807 - Duplicate symbol linker error under clang/macOS
Summary: Duplicate symbol linker error under clang/macOS
Status: RESOLVED FIXED
Alias: None
Product: frameworks-kio
Classification: Frameworks and Libraries
Component: general (show other bugs)
Version: 5.75.0
Platform: Compiled Sources macOS
: NOR normal
Target Milestone: ---
Assignee: KIO Bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-11-07 21:49 UTC by Dawid Wróbel
Modified: 2021-08-31 17:27 UTC (History)
4 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
vcpkg build output (1.29 MB, text/plain)
2020-11-07 21:49 UTC, Dawid Wróbel
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Dawid Wróbel 2020-11-07 21:49:50 UTC
Created attachment 133120 [details]
vcpkg build output

SUMMARY
I am having trouble getting kio to compile under macOS. I am working on vcpkg portfile for it and it fails with 'duplicate symbol' error. While I know it compiles fine under craft, AFIK it doesn't use most recent macOS version/SDK/Xcode. It may also be that vcpkg has toolchain configured to be less lenient towards common errors.

Specifically the error reported is:

duplicate symbol 'operator>>(QDBusArgument const&, QSslCertificate&)' in:
    src/kssld/CMakeFiles/kssld.dir/kssld.cpp.o
    lib/libKF5KIOCore.a(ksslcertificatemanager.cpp.o)
duplicate symbol 'operator<<(QDBusArgument&, QSslCertificate const&)' in:
    src/kssld/CMakeFiles/kssld.dir/kssld.cpp.o
    lib/libKF5KIOCore.a(ksslcertificatemanager.cpp.o)
duplicate symbol 'operator>>(QDBusArgument const&, KSslCertificateRule&)' in:
    src/kssld/CMakeFiles/kssld.dir/kssld.cpp.o
    lib/libKF5KIOCore.a(ksslcertificatemanager.cpp.o)
duplicate symbol 'operator<<(QDBusArgument&, KSslCertificateRule const&)' in:
    src/kssld/CMakeFiles/kssld.dir/kssld.cpp.o
    lib/libKF5KIOCore.a(ksslcertificatemanager.cpp.o)
duplicate symbol 'operator>>(QDBusArgument const&, QSslError::SslError&)' in:
    src/kssld/CMakeFiles/kssld.dir/kssld.cpp.o
    lib/libKF5KIOCore.a(ksslcertificatemanager.cpp.o)
duplicate symbol 'operator<<(QDBusArgument&, QSslError::SslError const&)' in:
    src/kssld/CMakeFiles/kssld.dir/kssld.cpp.o
    lib/libKF5KIOCore.a(ksslcertificatemanager.cpp.o)
ld: 6 duplicate symbols for architecture x86_64

I did some investigation and here's what follows:
- the operators above are declared *and defined* in kssld_dbusmetatypes.h
- the header is in turn included by kssld_interface.h and kssld_adaptor.h, which are respectively included by the ksslcertificatemanager.cpp and kissed.cpp, which the linker is complaining about.

My rusty C++ tells me that the linker complains because the body of the operators is implemented in the kssld_dbusmetatypes header file. Despite my rather limited knowledge of Qt and its metatype macros, I tried to separate the implementation from the header, but failed miserably. 

Note that 5.73 had an identical issue.

STEPS TO REPRODUCE
1. You can try to build the vcpkg package using https://github.com/microsoft/vcpkg/pull/13469


SOFTWARE/OS VERSIONS
macOS: 10.15.7 (19H2)
KDE Frameworks Version: 5.75
Qt Version: 5.15
Apple clang version 11.0.3 (clang-1103.0.32.62)
Comment 1 Ahmad Samir 2020-11-10 18:41:39 UTC
Might be related to the friend declarations in src/core/ksslcertificatemanager.h .. not sure though.
Comment 2 Dawid Wróbel 2020-11-10 19:54:34 UTC
I thought so, too, but I commented all that code and the references to befriended private members elsewhere, but still seeing the same issue.
Comment 3 Volker Krause 2020-11-11 10:07:13 UTC
Does adding `inline` to those operators help?
Comment 4 Dawid Wróbel 2020-11-11 15:08:24 UTC
It obviously does, I don't know why I didn't think about it!
Comment 5 Ahmad Samir 2020-12-02 12:39:33 UTC
@Volker, has this been fixed? (does it need fixing?)
Comment 6 Volker Krause 2020-12-02 16:18:32 UTC
I didn't submit this change (I was just guessing, I don't even have it locally), but it sounds like we should add it indeed.
Comment 7 Bug Janitor Service 2021-08-30 20:27:28 UTC
A possibly relevant merge request was started @ https://invent.kde.org/frameworks/kio/-/merge_requests/563
Comment 8 Dawid Wróbel 2021-08-31 17:27:51 UTC
Git commit eaa2729e17a15261f41599ad8c47124b486e4319 by Dawid Wróbel.
Committed on 30/08/2021 at 20:23.
Pushed by wrobelda into branch 'master'.

Inline kssld operators to avoid duplicate symbol errors

M  +6    -6    src/core/kssld_dbusmetatypes.h

https://invent.kde.org/frameworks/kio/commit/eaa2729e17a15261f41599ad8c47124b486e4319