C++11 使用-std=c++;11

C++11 使用-std=c++;11,c++11,boost,exc-bad-access,mlpack,C++11,Boost,Exc Bad Access,Mlpack,我在本地环境(Mac OS X 10.9.2、boost 1.55.0、mlpack 1.0.8、llvm 5.1 clang-503.0.38)中遇到了EXEC\u BAD\u ACCESS错误,我用一个非常简单的片段缩小了错误范围: #include "mlpack/methods/range_search/range_search.hpp" int main(int argc, const char *argv[]) { return 0; } g++版本是 iMac:buil

我在本地环境(Mac OS X 10.9.2、boost 1.55.0、mlpack 1.0.8、llvm 5.1 clang-503.0.38)中遇到了
EXEC\u BAD\u ACCESS
错误,我用一个非常简单的片段缩小了错误范围:

#include "mlpack/methods/range_search/range_search.hpp"

int main(int argc, const char *argv[])
{
    return 0;
}
g++版本是

iMac:build dongli$ g++ --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.38) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.1.0
Thread model: posix
并通过

g++ -std=c++11 main.cpp -o main -lmlpack -I/usr/include/libxml2
(您可以更改您的案例)

在终端中运行
main

iMac:build dongli$ ./main
Bus error: 10
并在
lldb
中运行它将为您提供更多信息

iMac:build dongli$ lldb ./main
Current executable set to './main' (x86_64).
(lldb) r
Process 79449 launched: './main' (x86_64)
Process 79449 stopped
* thread #1: tid = 0xb4a75, 0x00000001000500eb libmlpack.1.0.dylib`long double boost::math::lanczos::lanczos17m64::lanczos_sum<long double>(long double const&) + 59, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=2, address=0x100001d80)
    frame #0: 0x00000001000500eb libmlpack.1.0.dylib`long double boost::math::lanczos::lanczos17m64::lanczos_sum<long double>(long double const&) + 59
libmlpack.1.0.dylib`long double boost::math::lanczos::lanczos17m64::lanczos_sum<long double>(long double const&) + 59:
-> 0x1000500eb:  fstpt  (%rax)
   0x1000500ed:  fldt   0x26c8d(%rip)             ; .memset_pattern99 + 1296
   0x1000500f3:  fstpt  0x10(%rax)
   0x1000500f6:  fldt   0x26c94(%rip)             ; .memset_pattern99 + 1312
使用命令:

brew install boost --c++11
你可以 检查实际共享库文件是否标记为
可执行文件
,并且运行应用程序的用户是否可以访问该文件


事实并非如此,这可能意味着在运行时您会发现库的一个冲突版本。修复/覆盖运行时库路径,或者根据库的相同版本进行编译(如果是这样的话)

从代码中删除所有C++11功能(例如,初始值设定项列表和默认模板参数),并删除
-std=C++11
选项后,错误消失。我想我已经使用
自制
安装了
boost
mlpack
,并使用
-std=c++11
,但错误依然存在,因此我的经验是,如果不需要新功能,就不必使用它们。

我可以确保库的版本没有冲突,由于我只安装了
boost
mlpack
来自
homebrew
。因此我的钱完全在许可证上,但当不存在
-std=c++11
选项时,错误就消失了。那么您安装的boost版本确实存在冲突。显然,自制版本不是用--std=c++11编译的。这将导致违反规则的代码。顺便说一句,请参见例如@LiDong,问题中缺少该信息。
brew install boost --c++11