wxWidgets 运行时错误(版本不匹配)

Sta*_*per 5 c++ wxwidgets c++11 c++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})
Run Code Online (Sandbox Code Playgroud)

wxWidgets 3.0.3 的版本。

Bri*_*ing 7

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

add_definitions(-fabi-version=2)
Run Code Online (Sandbox Code Playgroud)

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

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

#include <iostream>

int main(void) {
    std::cout << "__GXX_ABI_VERSION=" << __GXX_ABI_VERSION << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这样编译:

g++ -fabi-version=2 -o check_fabi_version check_fabi_version.cpp 
Run Code Online (Sandbox Code Playgroud)

这样运行:

./check_fabi_version
Run Code Online (Sandbox Code Playgroud)

GCC 8.2.0 的输出示例:

__GXX_ABI_VERSION=1002
Run Code Online (Sandbox Code Playgroud)


小智 4

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

#define __GXX_ABI_VERSION 1010
Run Code Online (Sandbox Code Playgroud)

要不就

sudo apt-get purge wx2.8-headers wx2.9-headers
Run Code Online (Sandbox Code Playgroud)