[英]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.