我非常需要在当前项目的 Windows 上使用 clang 构建 wxWidgets ,并且我已经构建了 wxWidgets 3.0。使用 mingw-w64 7.2.0,64 bit,seh,posix在具有原生 clang llvm 5.0.0 的窗口上和 3.1.0 线程标准库和工具( x86_64-w64-windows-gnu 目标)。样品正在运作。但除了主要的,我无法链接dll。所以我无法在单片共享版本中构建opengl dll,并且所有dll都使用MONOLITHIC = 0。标头/预编译标头有一些错误。编译时我有很多redeclared inline; 'dllimport' attribute ignored
警告,如:
In file included from ../../src/xrc/xmlreshandler.cpp:18:
In file included from ..\..\include\wx/xrc/xmlreshandler.h:22:
In file included from ..\..\include\wx/window.h:18:
..\..\include\wx/event.h:3750:35: warning: 'wxObjectEventFunctor::operator()' redeclared inline; 'dllimport' attribute ignored [-Wignored-attributes]
inline void wxObjectEventFunctor::operator()(wxEvtHandler *handler, wxEvent& even
t)的
然后链接器undefined reference
错误如:
clang_mswuddll-forest\coredll_appcmn.o:(.rdata[_ZTV12wxAppConsole]+0x1e0): undefined reference to `non-virtual thunk to wxAppConsoleBase::FilterEvent(wxEvent&)'
在单片构建的情况下,我在编译阶段仅在文件src/common/glcmn.cpp
中发出警告,因此我使用以下命令编译了库:
mingw32-make.exe -f makefile.gcc MONOLITHIC=1 SHARED=1 BUILD=debug USE_OPENGL=0 CFLAGS=" -Wno-inconsistent-missing-override -Wno-shift-negative-value -Wno-unused-command-line-argument " CXXFLAGS=" -Wno-inconsistent-missing-override -Wno-shift-negative-value -Wno-unused-command-line-argument -fexceptions -fasynchronous-unwind-tables -fnon-call-exceptions -std=gnu++11 -pthread " LDFLAGS=" -Wno-unused-command-line-argument -fexceptions -fasynchronous-unwind-tables -fnon-call-exceptions -pthread -Wl,--allow-multiple-definition " CC="clang -target x86_64-w64-windows-gnu" CXX="clang++ -target x86_64-w64-windows-gnu"
我在构建wxWidgets 3.1.0 vesrion时只修补了两个文件以避免错误:include/wx/msw/private.h
和src/msw/mediactrl_am.cpp
在src/msw/mediactrl_am.cpp
中,我更改了case
中的常量:
case -609: // readystatechange in IActiveMovie2 and IMediaPlayer
并在include/wx/msw/private.h
我更改了有错误的行:
// close the handle in the class dtor
//template <wxUIntPtr INVALID_VALUE = (wxUIntPtr)INVALID_HANDLE_VALUE>
template <wxUIntPtr INVALID_VALUE = (wxUIntPtr)-1>
class AutoHANDLE
和
static HANDLE InvalidHandle()
{
//return static_cast<HANDLE>(INVALID_VALUE);
return reinterpret_cast<HANDLE>(INVALID_VALUE);
}
在我的工作中安装像 MSYS2 这样的工具非常困难,所以我想避免使用configure
。
在我的情况下,有没有办法修复使用clang构建的wxWidgets dll?