2011-09-11 23 views
4

我嘗試使用VxWorks的功能加載模塊加載代碼文件到內存,它給我的錯誤:搬遷值不適合在24位

Relocation value does not fit in 24 bits 

我嘗試添加了-mlongcall國旗在我的編譯器,但它不起作用。

+1

您需要指定處理器體系結構,確切的loadModule()調用(包括任何變量參數的定義)以及一些想法模塊內容。 –

回答

3

在PowerPC架構中工作之前,我看到了這個錯誤。假設您在類似的環境中工作,則問題必須具體處理系統中的內存量和相關分支指令的範圍。

阿貢國家實驗室有一個webpage detailing their experiences with the same issue。以下摘錄說明了該問題與相對分支地址:

The PowerPC relative branch instruction is limited to jumps between +/- 32MB of the current instruction (24 bits = +/- 4M instructions, 4 bytes per instruction = +/- 32MB). Unfortunately the vxWorks kernel gets put into the bottom end of RAM, but it loads all application code at the top end. If the two are separated by more than 32MB (should you have 64MB or more on board) then when it tries to load the application code those calls that use these relative branch instructions to vxWorks routines can't be resolved within 24 bits, and the loader prints the message you're seeing.

此問題的修復建議,無論是在阿貢國家實驗室是啓用了-mlongcall標誌重新編譯加載的模塊。

您的第一個問題表明,此標誌不是解決您的問題。 gnu標誌已設置,但未列出編譯器的其他信息。鑑於我只能建議你檢查你的編譯器文檔並確認-mlongcall標誌是有效的。

假設該標誌被支持,這可能是由一個鏈接庫引起的,該鏈接庫本身並沒有用-mlongcall標誌編譯。 ComplexIT的一篇文章詳細介紹了一個類似的問題,同樣在使用QT的PowerPC體系結構中。爲了解決這個問題,需要重建包括QT在內的所有圖書館。

3

,如果你想使用-mlongcall確保你的編譯器設置爲GNU您主動構建規格。請記住,WindRiver還提供Diab編譯器,這恰好是他們專有的編譯器。如果你想使用迪亞布編譯器相當於標誌用於編譯器:

-xcode絕對遠

如果使用工作臺,你可以看到你正在使用(也可能改變什麼編譯它,如果你願意的話)通過在項目資源管理器子窗口項目右鍵單擊,然後選擇

屬性 - >生成屬性 - >構建支持和規格

在該對話框中,您將看到(通常位於底部)一個名爲Active Build Spec的下拉菜單按鈕。選擇你想要的架構 - 編譯器組合。

如果您沒有找到所需的體系結構 - 編譯器組合,則很可能在創建項目時沒有選擇它,或者它沒有隨您購買的VxWorks一起提供。