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 的版本。
如果您希望拥有__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)