2

次のプログラムは で中断しpointer being freed was not allocatedます:

#include <boost/program_options.hpp>

int main(int argc, char* argv[])
{
    boost::program_options::positional_options_description positional;
    return 0;
}

OS X 10.6.7 の /usr/local にビルドした Boost 1.46.1 でプログラムをコンパイルしてリンクしました。私が(おそらく)リンクしているもの以外に、インストールされている libboost_program_options が見つかりません。

このクラッシュの原因は何ですか?


編集:スタックトレースに関しては、プログラム

#include <boost/program_options.hpp>
#include <execinfo.h>

int main(int argc, char* argv[])
{
    boost::program_options::positional_options_description positional;
    void* callstack[128];
    int i, frames = backtrace(callstack, 128);
    char** strs = backtrace_symbols(callstack, frames);
    for (i = 0; i < frames; ++i) {
        printf("%s\n", strs[i]);
    }
    free(strs);
    return 0;
}

として構築された

g++ -Wp,-MMD,.make-debug/main.dd -Wall -g3 -I/usr/local/include -c main.cc -o .make-debug/main.o
g++ -o sandbox .make-debug/main.o -lboost_program_options -L/usr/local/lib 

./sandbox として実行すると出力が生成されます

0   sandbox                             0x00000001000017bf main + 57
1   sandbox                             0x0000000100001764 start + 52
2   ???                                 0x0000000000000001 0x0 + 1
sandbox(50587) malloc: *** error for object 0x7fff70506500: pointer being freed was not al
located
*** set a breakpoint in malloc_error_break to debug

Command terminated

Boostの構築に関して:

$ cd boost_1_46_1
$ ./bootstrap.sh --prefix=/usr/local
$ ./bjam toolset=darwin-4.2

そして、これが私の ~/user-config.jam です:

using darwin : 4.0 : g++-4.0 ;
using darwin : 4.2 : g++-4.2 ;
using darwin : 4.5.1 : /Users/matan/usr/bin/g++ ;
4

2 に答える 2

2

再現できません

macmini:stackoverflow samm$ cat po.cc
#include <boost/program_options.hpp>
#include <boost/version.hpp>

#include <iostream>

int
main(int argc, char* argv[])
{
    std::cout << BOOST_LIB_VERSION << std::endl;
    boost::program_options::positional_options_description positional;
    return 0;
}
macmini:stackoverflow samm$ g++ -I /opt/local/include -L/opt/local/lib -lboost_program_options po.cc
macmini:stackoverflow samm$ ./a.out
1_46_1
macmini:stackoverflow samm$ 

ブーストを構築するために使用した手順、特に bjam への引数で質問を更新する必要があります。

于 2011-05-16T01:02:02.487 に答える
1

問題は解決したと思いますが、解決策に満足していません。以前に /usr/local に --program-suffix=-4.6 を指定して gcc 4.6.0 をインストールしたことを忘れていました。それをアンインストールしてBoostを再構築すると、問題が解決しました。その後、XCode に付属の gcc-4.0 と gcc-4.2 以外のコンパイラはインストールしませんでした。おそらく、gcc-4.6 ファイルが gcc-4.0 ファイルまたは darwin ツールセットに干渉しました。

于 2011-05-21T19:35:55.963 に答える