如何解释strace输出

时间:2015-02-24 12:53:15

标签: c++ boost strace

当我在嵌入式Linux上执行以下程序时,没有任何事情发生:

#include <boost/thread/thread.hpp>
#include <boost/lockfree/spsc_queue.hpp>
#include <iostream>

#include <boost/atomic.hpp>

void Test(void)
{
    std::cout << "Hello World" << std::endl;
}

int main(int argc, char* argv[])
{
    std::cout << "init";

    boost::thread producer_thread(Test);

    producer_thread.join();

    std::cout << "end";
}


# ./prog -> nothing happens here

strace输出的最后几行是:

open("/lib/libboost_thread.so.1.55.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\240\272\0\0004\0\0\0"..., 512) = 512
lseek(3, 95536, SEEK_SET)               = 95536
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1200) = 1200
lseek(3, 95226, SEEK_SET)               = 95226
read(3, "A'\0\0\0aeabi\0\1\35\0\0\0\0055T\0\6\3\10\1\t\1\22\4\24\1\25\1"..., 40) = 40
exit_group(1)                           = ?
+++ exited with 1 +++
# 

交叉编译的libbost_thread正确安装在/ lib。

程序在调用main()之前退出。该程序在我的Ubuntu下运行正常。

目标:ARM with buildroot(sama5d3)

工具链:arm-linux-gnueabihf -

此致

3 个答案:

答案 0 :(得分:2)

strace是跟踪系统调用的工具。在您的示例中,这包括对open()lseek()read()的调用。具体来说,您粘贴的代码段显示操作系统的动态库加载程序打开libboost_thread.so.1.55.0文件并读取其内容;而已。它并没有真正展示你的程序,除了它与该库相关联。

答案 1 :(得分:1)

也许是一个提示:

您是否已将libpthread与针对目标的编译和链接选项-pthread相关联?

如果不是它可以产生与环境中相同的效果:prog开始,尝试启动一个新线程,没有启用线程并调用abort()函数。因为abort()只是在退出代码中留下了错误的编程而没有其他事情发生。

你还可以添加你的编译和放大器吗?用于调试目的的链接命令!

另外:

不会打印没有endl的输出,因为cout是缓冲的。只有在您拨打flush或发送endl时,才会打印缓冲区。也许你在你的例子中改变了这一点。

希望有帮助...

答案 2 :(得分:0)

我发现了问题。

boost库是用arm-linux-gnueabi-(elibc)编译的,buildroot是用uClibc编译的。