• 4

前员工称苹果2016年用ARM取代Intel处理器

w180112 wrote:
講到這我就頭痛lib...(恕刪)


「執行」與「編譯」期間的 lib 遺失是兩回事。
編譯期間發生的錯誤訊息不會是「某某 lib 找不到」這麼簡單,
而是「某某 API:Symbol not found」這樣,
這代表 linker 是用靜態方式直接把 lib 編進最後的 bin 檔中。
這時候你該做的就是用 -L 旗標直接把 lib 的路徑餵給 linker。
如果還有問題,那就表示那個 lib 本身在編譯過程中使用了非 X-toolchain 工具,
最常見的 bug 就是 ar。最近我搞 libfastcgi 就發生這種狀況。

而在「執行」過程中跳出「某某 lib 找不到」的訊息,
那就表示 linker 是用動態方式鏈結(講白話文就是 DLL),
是由系統核心在執行的當下去找出對應的 shared lib 然後即時鏈結。
而基本上這就和你 lib 的安裝路徑、lib 放好以後有沒有更新系統資訊,
以及你編譯器設定的預設 root path 等相關。
另外一種可能性就是目前你安裝的 lib 版本不對,其中有一些 API 未實作。

通常在 X-compile 時,
我們會同樣把需要的 library 也 X-compile 成 target 的靜態 lib(.a 檔),
放在編譯器主機端,然後在 X-compile 時採用靜態鏈結。
通常就是 .configure 要加上 --DISABLE_SHARED 旗標,
LDFLAG 也要加上 -static 之類。
這樣可以省下很多麻煩,
尤其是 bin 檔預計會放在不同平台(Ångstrom、Ubuntu、Debian)上執行的時候。

基本上這些都是玩跨平台的基本功。
如果這樣就會搞死人,那你未免太小看軟體開發這項工作了。
當然沒有人天生就會這些,但是絕大部分的狀況你用錯誤訊息去 Google,
都能找到答案。更何況還有 stackexchange.com。
或是想要省事,直接在目標平台上直接用 tarball 開始從頭編譯,以上的問題通通不會發生。

或者,一個整合良好的 IDE,就可以解決以上絕大部分問題。

ulyssesric wrote:
「執行」與「編譯」期...(恕刪)


我知道兩者不同

我指的是編譯的部份

當然可以藉由加上flag來讓configure生成的makefile可以跨平台

但是有時候還是會因為一些lib而在編譯時候有所問題
w180112 wrote:
但是有時候還是會因為一些lib而在編譯時候有所問題


所以我才一直說就直接把 source 拿到目標平台上 native build 最好。

X-compile 的問題最後都可以解決,但就是一字曰「煩」。
碰到一個問題,解掉,再碰到下一個問題,再解掉...
到最後花的時間搞不好還比直接在目標平台上 native build 還多。

ulyssesric wrote:
所以我才一直說就直接...(恕刪)




編譯一次就要快一小時

然後source code改一改又要在編譯一次

一天根本沒那麼多時間編阿XDD
w180112 wrote:
唉編譯一次就要快一小...(恕刪)


...我會建議先在其他平台上測試到 OK 再搬去目標平台上 Compile。
特殊的 GPIO I/O、USART 之類另外寫成專屬模組單獨單元測試,
主要平台相對部分就寫個 Stub 來對應,
或是乾脆用 Domain socket IPC 把 I/O 部分做成獨立運作的附掛程式(我自己是這樣玩)。
這樣可以省下不少時間。

話說回來,編譯一次一小時那也是因為現在的嵌入式系統資源不足所導致。
如果真有一個 ARM 平台給你跑到 3GHz 外加 16G RAM,
也不會搞到這樣狼狽。
當初我買iBook 還可以升級到10.5,而Intel CPU 也是可以跑10.5,真要蘋果出個arm osx我也不意外。

ulyssesric wrote:
...我會建議先在其...(恕刪)


不是o不ok的問題

因為目前是想要改進某一個專案的效率

所以需要對source code去trace並進行改寫

但是因為電腦數量不夠 所以一定得放在嵌入式上面 目前替代方案是使用linux去編譯

os x會出現一大堆error 就算error修好了(通常是缺少lib或是.h)一樣是不能動
w180112 wrote:
但是因為電腦數量不夠 所以一定得放在嵌入式上面 目前替代方案是使用linux去編譯


本來就是用 Linux compile 啊~
Mac 畢竟是由 BSD 衍生,有部分東西像是 epoll 和 message queue 都不支援,
而且 Apple 的 GCC 版本太舊了;我會建議用 clang++ 取代。
  • 4
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?