2012-10-21 34 views
0

我試圖通過管道從gcc獲取輸出,但它拋出了上述錯誤。命令行是gcc -pipe -c -o - -xc -。代碼通過STDIN輸入。顯然,BFD庫需要一個可搜索的描述符。有沒有辦法解決這個限制?「無法在標準輸出上打開bfd」錯誤來自gcc

+1

你到底想幹什麼?看起來像對象文件的一個奇怪的要求。 – Mat

+0

我將解析ELF數據,解析符號並運行編譯的函數。 – cleong

+0

你有沒有看過LLVM?有可能更簡單的方法來做到這一點。 – Mat

回答

1

對象文件在各種頭文件中包含很多對二進制偏移量的交叉引用,並且由於編譯器不知道對象文件中的各個部分在完成寫出之前會有多大,因此會導致它在寫完實際的機器代碼後,必須返回並填寫這些引用。因此,大多數編譯器都會要求目標文件是可搜索的 - 否則他們需要將整個文件保存在內存中,直到完成編譯所有內容爲止!

解決方法很簡單,就是編譯到一個臨時文件,然後cat這個文件放到任何的管道你想用這個休息。

相關問題