我正在尝试在最近进行一些更改后构建元素库,但无法使其链接。
我的工具链:
- 带 MCF 线程的 GCC 9.2.1
- CMake 3.16.4
破坏构建的提交:https://github.com/cycfi/elements/commit/104cef3cc19bf6f568b233a29679135a2c1f06ca https://github.com/cycfi/elements/commit/104cef3cc19bf6f568b233a29679135a2c1f06ca
相关问题:https://github.com/cycfi/elements/issues/69 https://github.com/cycfi/elements/issues/69
编译器标志:-DNOMINMAX -DWIN32_LEAN_AND_MEAN -D_UNICODE @CMakeFiles/Buttons.dir/includes_CXX.rsp -O3 -DNDEBUG -flto -fno-fat-lto-objects -std=gnu++17
错误信息:
[ 68%] Linking CXX executable Buttons.exe
cd /d D:\Files\C++\workspace_windows\elements_fork\build_fork\examples\buttons && "C:\Program Files\CMake\bin\cmake.exe" -E cmake_link_script CMakeFiles\Buttons.dir\link.txt --verbose=1
"C:\Program Files\CMake\bin\cmake.exe" -E remove -f CMakeFiles\Buttons.dir/objects.a
C:\mingw64\mingw64\bin\gcc-ar.exe cr CMakeFiles\Buttons.dir/objects.a @CMakeFiles\Buttons.dir\objects1.rsp
C:\mingw64\mingw64\bin\g++.exe -O3 -DNDEBUG -flto -fno-fat-lto-objects -mwindows -Wl,--whole-archive CMakeFiles\Buttons.dir/objects.a -Wl,--no-whole-archive -o Buttons.exe -Wl,--out-implib,libButtons.dll.a -Wl,--major-image-version,0,--minor-image-version,0 @CMakeFiles\Buttons.dir\linklibs.rsp
C:/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.1/../../../../x86_64-w64-mingw32/bin/ld.exe: radio_button.cpp.obj (symbol from plugin):(.gnu.linkonce.t._ZN5cycfi8elements18basic_radio_buttonD1Ev[_ZThn208_N5cycfi8elements18basic_radio_buttonD1Ev]+0x0): multiple definition of `cycfi::elements::basic_radio_button::~basic_radio_button()'; main.cpp.obj (symbol from plugin):(.gnu.linkonce.t._ZN5cycfi8elements18basic_radio_buttonD1Ev[_ZThn24_N5cycfi8elements18basic_radio_buttonD1Ev]+0x0): first defined here
C:/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.1/../../../../x86_64-w64-mingw32/bin/ld.exe: radio_button.cpp.obj (symbol from plugin):(.gnu.linkonce.t._ZN5cycfi8elements18basic_radio_buttonD1Ev[_ZThn208_N5cycfi8elements18basic_radio_buttonD1Ev]+0x0): multiple definition of `non-virtual thunk to cycfi::elements::basic_radio_button::~basic_radio_button()'; main.cpp.obj (symbol from plugin):(.gnu.linkonce.t._ZN5cycfi8elements18basic_radio_buttonD1Ev[_ZThn24_N5cycfi8elements18basic_radio_buttonD1Ev]+0x0): first defined here
C:/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.1/../../../../x86_64-w64-mingw32/bin/ld.exe: radio_button.cpp.obj (symbol from plugin):(.gnu.linkonce.t._ZN5cycfi8elements18basic_radio_buttonD1Ev[_ZThn208_N5cycfi8elements18basic_radio_buttonD1Ev]+0x0): multiple definition of `non-virtual thunk to cycfi::elements::basic_radio_button::~basic_radio_button()'; main.cpp.obj (symbol from plugin):(.gnu.linkonce.t._ZN5cycfi8elements18basic_radio_buttonD1Ev[_ZThn24_N5cycfi8elements18basic_radio_buttonD1Ev]+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
目前的观察结果:
- 这不是 ODR 违规问题。
- 该项目不存在钻石传承。
-
https://github.com/Xeverous/elements/tree/radio-button-build-debug https://github.com/Xeverous/elements/tree/radio-button-build-debug构建但是https://github.com/Xeverous/elements/tree/radio-button-build-debug-1 https://github.com/Xeverous/elements/tree/radio-button-build-debug-1不 - 唯一的区别是对于
-1
我添加的分支radio_button
反对该示例
-
https://stackoverflow.com/a/39256013/4818802 https://stackoverflow.com/a/39256013/4818802没有帮助(为 C++ 添加了 3 条注释行) - 我有一个相反的问题,我得到多个定义而不是缺少定义
- 我尝试了附件中的示例代码https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47218 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47218但它没有重现问题
- 将元素构建为共享库时不会出现此问题
- 在 CMake Debug 构建类型中不会出现该问题
- 未启用 LTO 时不会出现该问题
- 存在此问题的所有受影响的类(在尝试多次提交后)都具有多重继承
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)