我使用点云库并尝试使用体素网格对点云进行下采样。当我使用Xcode时,它工作正常,我手动添加了所需的库,但没有使用cmake。该程序使用cmake编译好但如果我运行cmake编译的程序,我会收到以下错误:
$ ./main
$ Bus error: 10
我发现只有在包含pcl/filters/voxel_grid.h
时才会出现错误。我之前在程序中使用了其他类的PCL,并且cmake的一切正常。
如果还想到如果包含pcl/filters/voxel_grid.h
并从我的cmake文件中删除set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
,程序将编译并运行正常,就像在Xcode中一样(Xcode中的语言方言设置为C ++ 11)。问题是,我需要c ++ 11的功能,还需要cmake,因为我需要能够在不同的操作系统上轻松构建程序。
我在OS X 10.9.2上使用clang 3.4,boost 1.55.0,PCL 1.7.1和CUDA 5.5。
如果有人可以帮助我会很棒。
谢谢你的帮助
这是一个最小的例子:
//main.cpp
#include <pcl/filters/voxel_grid.h> // it works if this include is removed
int main(int argc, const char * argv[])
{
return 0;
}
我使用的cmake文件:
#cmake file
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(test)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
find_package(PCL 1.7 REQUIRED)
find_package(Boost 1.55 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS} ${BOOST_INCLUDE_DIRS})
add_executable(main main.cpp)
target_link_libraries(main ${PCL_LIBRARIES} ${BOOST_LIBRARIES})
我找到了问题的根本原因。我编译了一个示例,它在控制台上手动导致相同的问题,以便我可以比较Xcode和cmake使用的不同编译器标志/设置。
我发现,Xcode添加了一些cmake无法添加的标志。 Xcode添加的标志/选项之一是&#34; -fvisibility-inlines-hidden&#34;。使用该选项设置示例程序编译并运行正常,没有选项设置它编译但生成&#34;总线错误:10&#34;在运行时。
如果有人可以解释该选项的作用以及编译时必要的原因,那就太棒了。这只是铿锵声或OS X特定的,所以在不同的操作系统/编译器上不需要这个选项吗?
问候并感谢, Ruediger