abi

    3熱度

    2回答

    ,不知是否安全根據C99的標準,來解釋這樣一個結構: struct my_struct_t { int a; int b; int c; }; 作爲int[3]。即這個代碼片段是否適合所有ABI? struct my_struct_t f; int *i = &f.a; i[0] = 1; // f.a == 1 i[1] = 2; // f.b == 2

    5熱度

    3回答

    假設C庫必須與應用程序代碼共享結構的細節,並且必須保持API和ABI向後兼容性。它試圖通過檢查傳遞給它的結構的大小來做到這一點。 說,以下結構需要更新。在庫版本1, typedef struct { int size; char* x; int y; } foo; 在庫的版本2,將其更新爲:現在 typedef struct { int size;

    4熱度

    1回答

    我想編譯Linux上的動態鏈接的可執行文件,我想針對一個老的glibc ABI,以確保它能夠儘可能運行在儘可能多的Linux計算機。我知道典型的解決方案是使用chroot或虛擬機,安裝舊的工具鏈,讓工具鏈自然地定位到舊的glibc ABI,但我想知道是否有明確告訴編譯器的方法:「嘿,我希望你依賴版本GLIBCXX_3.4.11「。 謝謝!

    0熱度

    2回答

    我如何構建可在使用英特爾CPU的設備上工作的應用程序?與ARM技術的設備我的應用程序的工作,但是當我嘗試在設備安裝我的應用程序與英特爾CPU它`顯示此消息: Devicenot兼容 和日誌此消息: 失敗[INSTALL_FAILED_CPU_ABI_INCOMPATIBLE] 這是我的項目的build.gradle文件: apply plugin: 'com.android.application

    4熱度

    1回答

    對C++的內嵌命名空間的理由是源代碼和二進制兼容性(見香草薩特的紙N2535鏈接),但我一直沒能找到很好的例子保持二進制兼容現有的庫引入內嵌的命名空間時,或者如果有可能的。 (更多的信息,和源代碼兼容的例子,見this question) (用於解決相關的問題,使用內聯命名空間來引進incompability,見this question) 如果這是我們當前的磁帶庫(如中是指mylib.dll),

    5熱度

    1回答

    ELF Handling For Thread-Local Storage文檔爲各種體系結構提供了各種模型(本地執行/初始執行/常規動態)的彙編序列。但不是ARM - 是否有任何地方可以看到ARM的這種代碼序列?我正在編譯一個編譯器,並希望生成能夠在平臺鏈接器(包括程序和動態鏈接)下正常運行的代碼。爲了清楚起見,我們假設一個ARMv7 CPU和一個非常新的內核和glibc(比如3.13+/2.19

    15熱度

    3回答

    強烈建議在創建64位內核(用於x86_64平臺)時指示編譯器不要使用用戶空間ABI執行的128字節紅色區域。 (對於GCC,編譯器標誌是-mno-red-zone)。 如果內核被啓用,內核將不會中斷。 但是爲什麼呢?

    4熱度

    1回答

    說我有這個庫: // lib.h typedef struct MyStruct { int a; int b; } MyStruct; int func(void); 的所有功能都使用MYSTRUCT作爲參數。是否可以在不破壞ABI的情況下刪除MyStruct?

    16熱度

    1回答

    作爲Linux發行版中的下游維護者,我通常維護的一些軟件包開始在其代碼庫中使用C++ 11功能。它們都依賴於Linux發行版打包的不同庫。 Problems with the ABI將C++ 11代碼與C++ 98和AFAIK混合時,當編譯軟件生成軟件包時,大多數當前的主要Linux發行版默認不啓用C++ 11標誌。 問題是:主要的Linux發行版如何處理C++ 11代碼的入口?使用系統庫時,是否

    1熱度

    1回答

    我需要識別用於生成一些二進制文件,程序,動態庫和靜態庫的ABI。 我想問一下,如果有一個屬性或一個標籤或字符串,我可以與一些外部的工具,看看哪些ABI被用於創建二進制對象進行檢查。我的對象主要是用於x86和ARM的ELF,並且我也包含ABI以用於調試目的,就像DWARF一樣。 編輯:像在一般用於檢測文件的FILEFORMAT文件開始神奇字節。