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

时间:2017-07-15 23:34:12

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

启动程序时遇到问题:

致命错误:检测到程序和库构建版本之间不匹配 该库使用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的版本。

3 个答案:

答案 0 :(得分:2)

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

#define __GXX_ABI_VERSION 1010

或只是

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

答案 1 :(得分:2)

如果您希望拥有__GXX_ABI_VERSION=1002,请为GCC指定-fabi-version=2。为此,请在您的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 :(得分:0)

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