2016-05-26 50 views
0

我可以成功地交叉編譯上使用以下命令針對QNX OS(x86)的窗口升壓:b2 toolset=qcc target-os=qnx threadapi=pthread交叉編譯升壓1.60.0內部的依賴問題

然而,由於某些原因,它似乎是導致庫文件不能正確鏈接到內部依賴關係。

例如做的單元測試框架結果的objdump的在:

Dynamic Section: 
    NEEDED    bin.v2\libs\timer\build\qcc\release\target-os-qnx\threadapi-pthread\threading-multi\libboost_timer-qcc-mt-1_60.so.1.60.0 
    NEEDED    bin.v2\libs\system\build\qcc\release\target-os-qnx\threadapi-pthread\threading-multi\libboost_system-qcc-mt-1_60.so.1.60.0 
    NEEDED    libm.so.2 
    NEEDED    libc.so.3 

正如你可以看到有鏈接到定時器和系統庫(也QNX,既像一個荒謬的路徑linux,將'\'解釋爲轉義字符,所以我不能在QNX機器中使用文件夾結構)。我手動編輯庫的二進制文件,並刪除該路徑(我知道這是非常危險的......)到:

Dynamic Section: 
    NEEDED    libboost_timer-qcc-mt-1_60.so.1.60.0 
    NEEDED    libboost_system-qcc-mt-1_60.so.1.60.0 
    NEEDED    libm.so.2 
    NEEDED    libc.so.3 

其中一期工程。是否有可能迫使Boost不把整個路徑包括進圖書館?這是一個提升問題還是QNX 6.6 qcc工具鏈問題?我真的不想手動編輯每個庫的二進制文件...

+0

在我看來,你沒有使用構建過程的'install'(甚至是'stage')步驟。這將從編譯目錄的複雜層次結構中收集編譯的所有相關輸出,並將所有二進制文件放入一個位置。 –

+0

@DanMašek就我所知,它應該是'stage'默認的。輸出文件被構建爲boost_root \ stage \ lib \ –

+0

哦,我明白了。有趣。 –

回答

0

直接控制它的屬性被稱爲hardcode-dll-paths,默認情況下它是真實的,以便在開發過程中更加方便。 'install'metatarget明確地將其更改爲false,以便您安裝的二進制文件不涉及構建樹。這聽起來像你使用了一個不使用installstage目標的構建過程?

+0

對於遲到的評論,我還沒有嘗試過你的解決方案,直到現在。不幸的是,無論是安裝還是舞臺似乎都解決了這個問題我得到了相同的結果,dll路徑仍在使用構建樹。是否有可能以另一種方式改變'hardcode-dll-paths'而不是使用'install'或'stage'?有任何想法嗎?謝謝 –

+0

你可以嘗試在b2命令行上指定'hardcode-dll-paths = false'嗎? –

+0

感謝您的幫助,但它仍然是一樣的結果。運行以下命令:'b2 stage hardcode-dll-paths = false toolset = qcc target-os = qnx threadapi = pthread'。還嘗試通過Linux bash shell運行相同的命令,但結果相同。還有什麼想法? –