用于swig的Python和c++11:如何启用c++11

2024-09-27 21:34:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用swig来使用python的共享库。我对c++不是很熟悉,但我已经用一个简单的对象做了第一次测试(用c++),效果很好。在

现在我试图让它与一个已经在Linux(和Windows)下编译的更大的项目一起工作。但我做不到。在

以下是我尝试的:

我的饮料清单:

project(elecswig)

include_directories(${COREALPI_DIR}/include)
include_directories(/usr/include/c++/4.9)

find_package(SWIG REQUIRED)
include(${SWIG_USE_FILE})
if (NOT MSVC)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
endif()

find_package(PythonLibs)
include_directories(${PYTHON_INCLUDE_PATH})

set_source_files_properties(src/elec.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties(src/elec.i PROPERTIES SWIG_FLAGS "-includeall")

link_directories(${COREALPI_LIBRARY})

swig_add_module(elecswig python src/elec.i)

swig_link_libraries(elecswig
    ${PYTHON_LIBRARIES}
    elec
)

还有我的elec.i for Swig,他用名称空间调用a.h:

^{pr2}$

当我试图编译以获取Python Lybrary时,出现了以下错误:

/usr/include/c++/4.9/bits/c++0x_warning.h:32: Error: CPP #error "This file requires compiler and library support for the \
ISO C++ 2011 standard. This support is currently experimental, and must be \
enabled with the -std=c++11 or -std=gnu++11 compiler options.". Use the -cpperraswarn option to continue swig processing.
/usr/include/c++/4.9/cstring:41: Error: Unable to find 'bits/c++config.h'
/usr/include/c++/4.9/string:38: Error: Unable to find 'bits/c++config.h'
/usr/include/c++/4.9/bits/stringfwd.h:39: Error: Unable to find 'bits/c++config.h'
/usr/include/c++/4.9/bits/memoryfwd.h:48: Error: Unable to find 'bits/c++config.h'
/usr/include/c++/4.9/bits/stl_algobase.h:59: Error: Unable to find 'bits/c++config.h'
/usr/include/c++/4.9/bits/functexcept.h:39: Error: Unable to find 'bits/c++config.h'
/usr/include/c++/4.9/bits/cpp_type_traits.h:37: Error: Unable to find 'bits/c++config.h'
/usr/include/c++/4.9/ext/type_traits.h:34: Error: Unable to find 'bits/c++config.h'
/usr/include/c++/4.9/bits/move.h:33: Error: Unable to find 'bits/c++config.h'
/usr/include/c++/4.9/bits/concept_check.h:35: Error: Unable to find 'bits/c++config.h'
/usr/include/c++/4.9/bits/stl_iterator_base_types.h:64: Error: Unable to find 'bits/c++config.h'
/usr/include/c++/4.9/cwchar:41: Error: Unable to find 'bits/c++config.h'
/usr/include/c++/4.9/bits/allocator.h:46: Error: Unable to find 'bits/c++allocator.h'
/usr/include/c++/4.9/bits/localefwd.h:39: Error: Unable to find 'bits/c++config.h'
/usr/include/c++/4.9/bits/localefwd.h:40: Error: Unable to find 'bits/c++locale.h'
/usr/include/c++/4.9/iosfwd:38: Error: Unable to find 'bits/c++config.h'
/usr/include/c++/4.9/cctype:41: Error: Unable to find 'bits/c++config.h'
[...]
/usr/include/c++/4.9/cstdlib:41: Error: Unable to find 'bits/c++config.h'
/usr/include/c++/4.9/utility:68: Error: Unable to find 'bits/c++config.h'
/usr/include/c++/4.9/ctime:41: Error: Unable to find 'bits/c++config.h'
/usr/include/c++/4.9/ctime:42: Error: Unable to find 'time.h'
/usr/include/c++/4.9/iomanip:38: Error: Unable to find 'bits/c++config.h'
/usr/include/c++/4.9/numeric:60: Error: Unable to find 'bits/c++config.h'
elecswig/CMakeFiles/_elecswig.dir/build.make:53: recipe for target 'elecswig/elecPYTHON_wrap.cxx' failed
make[2]: *** [elecswig/elecPYTHON_wrap.cxx] Error 1
CMakeFiles/Makefile2:75: recipe for target 'elecswig/CMakeFiles/_elecswig.dir/all' failed
make[1]: *** [elecswig/CMakeFiles/_elecswig.dir/all] Error 2
Makefile:75: recipe for target 'all' failed
make: *** [all] Error 2

他似乎找不到很多文件。h,但我大多有c++11错误。在

我试图在CMake中设置标志,但似乎没有任何改变。在

你能帮我吗?在

如果需要,我可以提供更多信息。在

谢谢


Tags: toconfigformakeincludeusrerrorfind
2条回答

为了记录在案,为了回答本文标题中提出的问题(这与原作者实际遇到的问题不同):

使用此声明而不是设置CMAKE_CXX_FLAGS

set_property(TARGET ${SWIG_MODULE_elecswig_REAL_NAME} PROPERTY CXX_STANDARD_REQUIRED 11)

经过几个小时的测试,我找到了它不起作用的原因。在CMakeLists中:

set_source_files_properties(src/elec.i PROPERTIES SWIG_FLAGS "-includeall")

包括所有的库和依赖项,不管编译器使用什么。如果你有两个版本的libstdc++和gcc/g++,他似乎找不到好的库来链接/使用。在

如果我把它取下来,CMake就可以了。我不再有unable to findc++11问题。在

我必须使用g++-5来使其工作(4.9似乎缺少c++11的一些特性),并添加好的名称空间和include。在

现在我可以访问Python中的共享库了。在

相关问题 更多 >

    热门问题