1

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

#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

如您所见,它指向我boost::math::lanczos::lanczos17m64::lanczos_sum,但我不知道是什么问题。

但是当-std=c++11不存在时,不会发生错误。我也尝试boost使用--c++11by重新安装homebrew

提前致谢!

编辑:

我只安装了一个boost

iMac:~ dongli$ ls /usr/local/Cellar/boost/
1.55.0

用命令:

brew install boost --c++11
4

2 回答 2

1

您可以检查实际的共享库文件是否已标记executable并且运行应用程序的用户是否可以访问?

不是这样,这可能意味着在运行时您会发现库的冲突版本。修复/覆盖运行时库路径,如果是,则针对相同版本的库进行编译

于 2014-03-20T09:13:37.120 回答
0

从我的代码中删除所有 C++11 功能(例如,initializer_list 和默认模板参数)并删除该-std=c++11选项后,错误就消失了。我想我已经安装了boost, mlpackwith -std=c++11using homebrew,但错误仍然存​​在,所以我的经验是如果没有必要,不要使用新功能。

于 2014-03-21T13:48:04.003 回答