[英]How to interpret the strace output
在嵌入式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下可以正常运行。
目标:具有buildroot的ARM(sama5d3)
工具链:arm-linux-gnueabihf-
问候
strace
是跟踪系统调用的工具。 在您的示例中,这包括对open()
, lseek()
和read()
lseek()
。 具体来说,您粘贴的代码片段显示了OS的动态库加载器,打开了libboost_thread.so.1.55.0
文件并读取其内容。 而已。 除了与该库链接之外,它实际上没有演示任何有关您程序的内容。
可能提示:
您是否已使用目标的编译和链接选项-pthread
与libpthread链接?
如果不是,则其效果可能与您在环境中看到的效果相同:编启动,尝试启动新线程,未启用任何线程,然后调用abort()函数。 因为abort()只会使编步在退出代码中出错,否则不会发生其他情况。
您是否还可以添加用于编译目的的编译和链接命令!
此外:
不带endl
输出将不会被打印,因为cout已缓冲。 仅当您调用flush
或发送endl
才会打印缓冲区。 也许您在示例中对此进行了更改。
希望有帮助...
我发现了问题。
boost库是用arm-linux-gnueabi-(elibc)编译的,而buildroot是用uClibc编译的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.