首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >wxWidgets不使用来自VSCode的Cmake链接

wxWidgets不使用来自VSCode的Cmake链接
EN

Stack Overflow用户
提问于 2022-04-12 00:42:45
回答 1查看 235关注 0票数 0

问题

在构建我的项目时,我会得到链接器错误。该项目在查找wxWidgets头时没有遇到任何问题。我查看了wxWidgets最小示例,并重新创建了它,以验证我的源代码构建是否正常工作。我在VSCode中使用cmake来使用cmake扩展进行构建。

wxWidgets cmake生成的很好,wxwidget的构建看起来也很好。我正在使用VisualStudio2022 amd64工具集进行编译。(我只为编译器安装了VS2022 Community )。

看起来它正在为库构建DLL。我更喜欢静态库,但在最初的运行中,我认为它并不重要。我按照建议将我的应用程序链接到wx::net::core wx::base。我想,当我去构建的时候,这会解决连接的问题。

当我使用wxWidgets库构建我的整个应用程序时,我会得到这些链接器错误。我在这里做错什么了?我显然没有为它正确地配置一些东西来查找库,但是我在这里遇到了一些困难。

链接器错误

代码语言:javascript
运行
复制
[build] ProjectName.obj : error LNK2001: unresolved external symbol "protected: static class wxAppConsole * (__cdecl* wxAppConsoleBase::ms_appInitFn)(void)" -snipped-
[build] ProjectName.obj : error LNK2001: unresolved external symbol "protected: static class wxAppConsole * wxAppConsoleBase::ms_appInstance" -snipped-
[build] MainWindow.obj : error LNK2001: unresolved external symbol "void (__cdecl* wxTheAssertHandler)(class wxString const &,int,class wxString const &,class wxString const &,class wxString const &)"-snipped-
[build] MainWindow.obj : error LNK2001: unresolved external symbol "bool wxTrapInAssert" (?wxTrapInAssert@@3_NA) -snipped-
[build] MainWindow.obj : error LNK2001: unresolved external symbol "class wxMBConv * wxConvLibcPtr" (?wxConvLibcPtr@@3PEAVwxMBConv@@EA) -snipped-
[build] MainWindow.obj : error LNK2001: unresolved external symbol "public: static unsigned __int64 const wxString::npos" (?npos@wxString@@2_KB)-snipped-
[build] MainWindow.obj : error LNK2001: unresolved external symbol "class wxSize const wxDefaultSize" (?wxDefaultSize@@3VwxSize@@B)-snipped-
[build] MainWindow.obj : error LNK2001: unresolved external symbol "class wxPoint const wxDefaultPosition" (?wxDefaultPosition@@3VwxPoint@@B)-snipped-
[build] MainWindow.obj : error LNK2001: unresolved external symbol "char const * const wxFrameNameStr" (?wxFrameNameStr@@3QBDB)-snipped-
[build] C:\path\to\executable\ProjectName.exe : fatal error LNK1120: 9 unresolved externals -snipped-
[build] Build finished with exit code 1 

项目布局

相当基本的项目布局。我正在构建一个GUI应用程序,并且在逻辑上将ui源代码分离开来。

这基本上是对最小wxWidgets示例的重新设计,其中您有一个入口点(Projectname.hpp和ProjectName.cpp提供这个),还有一个主窗口/框架(MainWindow.hpp和MainWindow.cpp提供这个)。ProjectName应用程序将执行wxIMPLEMENT_APP(ProjectName),并将保存指向MainWindow的指针。MainWindow使用OnInit函数显示。

代码语言:javascript
运行
复制
ProjectName/
    build/
    external/
        wxWidgets-3.1.6/
        -CMakeLists.txt
    source/
        ui/
            -MainWindow.hpp
            -MainWindow.cpp
        -ProjectName.hpp
        -ProjectName.cpp
    -CMakeLists.txt

我已经编译了wxWidgets库,使用它们的cmake指令来使用cmake中的子目录,这样我就可以将它添加到我的项目中。以下是CMakeLists.txt的内容

ProjectName CMakeLists.txt

代码语言:javascript
运行
复制
cmake_minimum_required(VERSION 3.23)

set(MAJOR 0)
set(MINOR 0)
set(PATCH 1)

#Setup Project
project(ProjectNameProject VERSION ${MAJOR}.${MINOR}.${PATCH}
                           DESCRIPTION "ProjectName Descrip"
                           LANGUAGES CXX)

add_executable(ProjectName WIN32 ${PROJECT_SOURCE_DIR}/source/ProjectName.cpp 
                             ${PROJECT_SOURCE_DIR}/source/ui/MainWindow.cpp)

target_include_directories(ProjectName PRIVATE ${PROJECT_SOURCE_DIR}/source)
target_include_directories(ProjectName PRIVATE ${PROJECT_SOURCE_DIR}/source/ui)

target_link_libraries(ProjectName PRIVATE wx::net wx::core wx::base)

add_subdirectory(${CMAKE_SOURCE_DIR}/external)

项目名称/外部CMakeLists.txt

代码语言:javascript
运行
复制
cmake_minimum_required(VERSION 3.23)
add_subdirectory(${CMAKE_SOURCE_DIR}/external/wxWidgets-3.1.6)

更新

我更改了用于构建共享库(DLL)的Cmake选项,并将其设置为OFF。完成后,它构建了一个静态库(LIB)。这似乎解决了我的链接问题。

根据Igor的建议,我再次查看了最小示例CMakeLists.txt,并注意到它们使用了下面的行来链接

代码语言:javascript
运行
复制
target_link_libraries(${PROJECT_NAME} ${wxWidgets_LIBRARIES}) 

也许我的行(下面)是静态链接的方式,而不适用于DLL?

代码语言:javascript
运行
复制
target_link_libraries(ProjectName PRIVATE wx::net wx::core wx::base)

如果有人能帮助我理解为什么让它静态地修复它,我会百分之百地接受这个答案。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71835743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档