【问题标题】:wxWidgets runtime error (Mismatch version)wxWidgets 运行时错误(版本不匹配)
【发布时间】:2017-12-20 18:38:14
【问题描述】:

我在启动程序时遇到问题:

致命错误:检测到程序和库构建版本不匹配。
该库使用 3.0(wchar_t,带有 C++ ABI 1010 的编译器,wx 容器,与 2.8 兼容),
并且您的程序使用了 3.0(wchar_t,带有 C++ ABI 1009 的编译器,wx 容器,与 2.8 兼容)。



我的 cmake 设置:

cmake_minimum_required(VERSION 3.0)

project(simple)

set(CMAKE_BUILD_TYPE Release)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${wxWidgets_CXX_FLAGS} -Wall -std=c++14")

find_package(wxWidgets COMPONENTS net gl core base)

include("${wxWidgets_USE_FILE}")

add_executable(${PROJECT_NAME} main.cpp)

target_link_libraries(${PROJECT_NAME} ${wxWidgets_LIBRARIES})

wxWidgets 3.0.3 版本。

【问题讨论】:

  • 哪个操作系统/版本/工具包?你自己编译了这个库吗?
  • 我有两个版本的 wxWidgets。我删除了一次,效果很好。

标签: c++ c++11 c++14 wxwidgets


【解决方案1】:

如果您希望拥有__GXX_ABI_VERSION=1002,请将-fabi-version=2 指定给GCC。要在您的 CMakeLists.txt 中执行此操作,请添加:

add_definitions(-fabi-version=2)

与手动重新定义 __GXX_ABI_VERSION 相比,这是一种首选方法,这将违反 C++ 标准并可能导致未定义的行为。

注意:在 GCC 的未来版本中,-fabi-version=2 可能并不总是对应于 __GXX_ABI_VERSION=1002。编译并运行这个快速的 C++ 程序来检查它:

#include <iostream>

int main(void) {
    std::cout << "__GXX_ABI_VERSION=" << __GXX_ABI_VERSION << std::endl;
    return 0;
}

这样编译:

g++ -fabi-version=2 -o check_fabi_version check_fabi_version.cpp 

这样跑:

./check_fabi_version

GCC 8.2.0 的示例输出:

__GXX_ABI_VERSION=1002

【讨论】:

    【解决方案2】:

    我安装了两个版本的 wxWidgets。我删除了其中一个,效果很好。

    【讨论】:

      【解决方案3】:

      您可以尝试添加到您的程序中

      #define __GXX_ABI_VERSION 1010
      

      或者只是

      sudo apt-get purge wx2.8-headers wx2.9-headers
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-07
        • 2017-12-02
        • 2011-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-09
        相关资源
        最近更新 更多