- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
目前我正在使用 boost::program_options
来解析 BeagleBoard(基于 ARM 的处理器)上的配置文件。我的程序是多线程的,并链接到 boost 1.45 multithreaded
库。
虽然我的程序在解析配置文件时似乎挂起
namespace po = boost::program_options;
po::options_description desc("Options");
uint32_t option1=0;
std::vector<std::string> optionsString;
std::cout<<"Before adding options"<<std::endl;
desc.add_options()
("option1",
po::value<uint32_t>(&option1), "...")
("finaloption",
po::value<std::vector<std::string> >(&optionsString)->multitoken(), "string of options");
//Never gets here
std::cout<<"After adding options"<<std::endl;
po::variables_map vm;
std::cout<<"Starting program"<<std::endl;
程序在打印出“添加选项之后”之前挂起。如果我通过 gdb 运行该程序,请停止它并进行回溯,它只会显示它在“从不到达此处”评论之前在线。回溯的顶部就在
#0 ??
#1 __lll_lock_wait lowlevellock.c:47
#2 __pthread_mutex_lock pthread_mutex_lock.c:61
#3 in boost::shared_ptr<boost::program_options::option_description>* std::__uninitialized_move_a<boost::shared_ptr<boost::program_options::option_description>*, boost::shared_ptr<boost::program_options::option_description>*, std::allocator<boost::shared_ptr<boost::program_option::option_description> > >(boost::shared_ptr<boost::program_optionns::option_description>*, boost::shared_ptr<boost::program_options::option_description>*, std::allocator<boost::shared_ptr<boost::program_options::option_description> >&) () from /usr/local/lib/libboost_program_options-mt.so.1.45.0
#4 in std::vector<boost::shared_ptr<boost::program_options::option_description>, std::allocator<boost::shared_ptr<boost::program_options::option_description> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<boost::shared_ptr<boost::program_options::option_description>, std::vector<boost::shared_ptr<boost::program_options::option_description>, std::allocator<boost::shared_ptr<boost::program_options::option_description> const&)() from /usr/local/lib/libboost_program_options-mt.so.1.45.0
#5 in boost::program_options::options_description::add(boost::shared_ptr<boost::program_options::option_description>) () from /usr/local/lib/libboost_program_options-mt.so.1.45.0
...(如果你想要更多,请告诉我)
有什么想法吗?该程序在 x86 机器上运行良好
编辑:进一步的信息,这似乎不会在优化关闭时发生(使用 -O2 编译这将相当一致地发生)。
Edit2:进一步的分析表明,在关闭优化的情况下仍然会发生这种情况,-O0。
最佳答案
这可能是与您如何构建 boost 和您的应用程序相关的问题。如果您为 thumb 编译和没有 thumb 编译,则互斥锁实现是不同的。确保使用相同的 thumb 设置编译应用程序和 boost 库。
这是我用来编译 boost
的示例 user-config.jam
:
if [ os.name ] = CYGWIN || [ os.name ] = NT
{
HOST_TAG = windows ;
}
else if [ os.name ] = LINUX
{
HOST_TAG = linux-x86 ;
}
else if [ os.name ] = MACOSX
{
HOST_TAG = darwin-x86 ;
}
modules.poke : NO_BZIP2 : 1 ;
modules.poke : NO_GZIP : 1 ;
LIB_ROOT = /home/user/lib ;
NDK_ROOT = $(LIB_ROOT)/android-ndk-r8c ;
LLVM_VERSION = 3.1 ;
LLVM_NAME = llvm-$(LLVM_VERSION) ;
LLVM_TOOLCHAIN_ROOT = $(NDK_ROOT)/toolchains/$(LLVM_NAME) ;
LLVM_TOOLCHAIN_PREBUILT_ROOT = $(LLVM_TOOLCHAIN_ROOT)/prebuilt/$(HOST_TAG) ;
LLVM_TOOLCHAIN_PREFIX = $(LLVM_TOOLCHAIN_PREBUILT_ROOT)/bin/ ;
TOOLCHAIN_VERSION = 4.6 ;
TOOLCHAIN_NAME = arm-linux-androideabi-$(TOOLCHAIN_VERSION) ;
TOOLCHAIN_ROOT = $(NDK_ROOT)/toolchains/$(TOOLCHAIN_NAME) ;
TOOLCHAIN_PREBUILT_ROOT = $(TOOLCHAIN_ROOT)/prebuilt/$(HOST_TAG) ;
TOOLCHAIN_PREFIX = $(TOOLCHAIN_PREBUILT_ROOT)/bin/arm-linux-androideabi- ;
using clang : $(TOOLCHAIN_VERSION) :
$(LLVM_TOOLCHAIN_PREFIX)clang :
<compileflags>"-gcc-toolchain $(TOOLCHAIN_PREBUILT_ROOT)"
<compileflags>"-isystem $(LLVM_TOOLCHAIN_PREBUILT_ROOT)/lib/clang/$(LLVM_VERSION)/include"
<compileflags>"-isysroot $(NDK_ROOT)/platforms/android-9/arch-arm/usr/include"
<compileflags>-std=gnu++11
<compileflags>-stdlib=libc++
<compileflags>-fomit-frame-pointer
<compileflags>-ffast-math
<compileflags>"-target armv7-none-linux-androideabi"
<compileflags>-march=armv7-a
<compileflags>-mfloat-abi=softfp
<compileflags>-mfpu=neon
<compileflags>-DPAGE_SIZE=sysconf\\(_SC_PAGESIZE\\)
<compileflags>-I$(NDK_ROOT)/boost/include
<compileflags>-I$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/$(TOOLCHAIN_VERSION)/include
<compileflags>-I$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/$(TOOLCHAIN_VERSION)/libs//armeabi-v7a/include
<compileflags>-I$(NDK_ROOT)/platforms/android-9/arch-arm/usr/include
<linkflags>-s
<archiver>$(TOOLCHAIN_PREFIX)ar
<ranlib>$(TOOLCHAIN_PREFIX)ranlib
;
请注意,在这个例子中,我没有启用 thumb 进行编译。
关于c++ - boost::program_options 卡在 ARM 上 "sometimes",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11953822/
我正在尝试解析从命令行输入的列表。 我的类是从向量派生的 编译器提示重载验证不明确。我知道为什么,但不知道如何解决这个问题。 请帮忙。 下面是一个生成错误的最小示例。如果将 ch_list 的类型更改
使用 boost::program_options,当它在命名空间内声明时,我无法获得自己的选项类型进行编译。但是在命名空间之外它编译并工作正常: #include using namespace
我目前正在尝试在我的模拟中实现 boost::program_options 库。在读取(许多)参数时,我想做这样的事情 namespace po = boost::program_options;
我目前正在尝试重做一些传递给我的代码。代码的原始点是读取配置文件,并在boost::program_options::variable_map中设置文件中的不同选项,然后读取该代码的其他所有部分,这些
我正在尝试使用 Boost::program_options 读取配置文件。配置文件如下所示: hier.arch.y.option_name = 0x5 another.hier.archy.set
#include #include #include #include void basic_approach(int argc, char const *argv[]) { try
我无法找出使用 boost::program_options 的链接错误。这是一个示例 C++ 代码: # sample_code.cpp #include int main() { boo
我正在尝试在配置文件的值中使用井号 ('#')。 我的用例是一个音乐程序,其中的值给出了吉他乐谱的调音。因此,在值中支持“#”是强制性的,并且不支持任何解决方法,这与可以使用“b”模拟的平面不同。 我
我正在尝试了解 program_options 自定义验证,以便将 python 代码转换为 c++ 代码。 无论如何 我在示例中读到我必须重载验证函数 我试图在 boost program_opti
我目前正在阅读 Boost.Program_options 教程。 这是他们介绍的一些代码: // Declare the supported options. po::options_descrip
海湾合作委员会 4.7.2/ boost 1.58.0 我正在尝试看起来像这样的代码,几乎完全取自文档中的示例: namespace po = boost::program_options; po::
我使用 ubuntu 10.04 和 libboost1.40。 ls -l /usr/lib | grep boost_pro -rw-r--r-- 1 root root 64080
boost::program_options 似乎支持某种级别的 custom validation但对我来说,验证是根据类型而不是每个参数编写的,这似乎很奇怪,我想知道我是否在这里遗漏了什么。 例如
构建我的项目时,Boost_LIBRARIES 不包含 program_options,即使它是必需的并且已找到。如果我手动添加它,它工作正常。我的 CMake 包含以下内容: find_packag
我对 boost::program_options 有疑问 我有课 namespace po = boost::program_options; class imageProcess{ private
program_options 是少数几个不只是头文件(因此需要单独编译)的 Boost 库之一。 我需要在未安装 Boost 的集群中运行我在 PC 上编译的程序。我没有安装 Boost 的管理权限
在 debian stretch 和 gcc 6.4.0 上,boost 1.66.0 boost::program_options 总是用空值解析命令行。代码如下: #include #inclu
我正在尝试从源代码构建第 3 方 C++ 库,它依赖于 Boost。在构建的最后一步,我得到了这样的错误: [ 90%] Linking CXX executable Shannon_RNASeq_C
我在使用 boost:program_options 时遇到问题 这个简单的程序,从 boosts 的文档中复制粘贴: #include int main( int argc, char** arg
一开始不解析参数,而是在程序已经运行了一段时间的某个时间解析从管道读取的输入字符串。 boost::program_options 可以这样做吗? 谢谢。编辑: 我必须在 python 中使用不同的参
我是一名优秀的程序员,十分优秀!