boost :: program_options :: positional_options_description прекращение - PullRequest
2 голосов
/ 16 мая 2011

Следующая программа прерывается с 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;
}

Я скомпилировал и связал программу с Boost 1.46.1, которую я встроил в / usr / local, наOS X 10.6.7.Я не могу найти ни одной установленной libboost_program_options, кроме той, с которой я (предположительно) ссылаюсь.

Есть идеи, что вызывает этот сбой?


Редактировать : Что касается stacktrace, программа

#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++ ;

Ответы [ 2 ]

2 голосов
/ 16 мая 2011

Я не могу воспроизвести

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.

1 голос
/ 21 мая 2011

Я думаю, что решил проблему, но я не доволен своим решением.Я не упомянул, что ранее я установил gcc 4.6.0 с --program-suffix = -4.6 в / usr / local.Удаление и восстановление Boost решили проблему.Тогда у меня не было никаких установленных компиляторов, кроме gcc-4.0 и gcc-4.2, которые поставлялись с XCode.Предположительно файлы gcc-4.6 мешали файлам gcc-4.0 или набору инструментов darwin.

...