簡體   English   中英

64位Ubuntu 16.04上的32位編譯失敗

[英]32 bit compilation failing on 64 bit Ubuntu 16.04

我有一個應用程序需要使用glib和第三方提供的32位庫。

當我在32位Ubuntu上編譯時,應用程序構建並成功運行。 但是,當我在64位Ubuntu上嘗試相同時,由於以下錯誤,它無法構建:

/usr/include/glib-2.0/glib/gtypes.h: In function ‘_GLIB_CHECKED_ADD_U64’:
/usr/include/glib-2.0/glib/gmacros.h:217:53: error: size of array ‘_GStaticAssertCompileTimeAssertion_0’ is negative
#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
                                                 ^
/usr/include/glib-2.0/glib/gmacros.h:214:47: note: in definition of macro ‘G_PASTE_ARGS’
#define G_PASTE_ARGS(identifier1,identifier2) identifier1 ## identifier2
                                           ^
/usr/include/glib-2.0/glib/gmacros.h:217:44: note: in expansion of macro ‘G_PASTE’
#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
                                        ^
/usr/include/glib-2.0/glib/gtypes.h:422:3: note: in expansion of macro ‘G_STATIC_ASSERT’
G_STATIC_ASSERT(sizeof (unsigned long long) == sizeof (guint64));
^

注意:我有gcc-multilib和g ++ - multilib。 我也嘗試將/usr/lib/x86_64-linux-gnu/glib-2.0/include/glibconfig.h的定義從8更改為4,但沒有成功。 我也試過安裝libglib2.0-dev:i686但是cmake中的pkg config找不到glib。 我也在為C,CXX和LD使用適當的-m32標志

任何有關此問題的幫助將不勝感激。

不知道為什么glib不會嘗試使用int64_t而不是重復它。 對我來說似乎很傻。 也許他們是故意這樣做的,如果你做了你做的事情就增加破解的機會,並嘗試使用64位glib安裝編譯32位代碼。

要編譯32位應用程序,您需要32位庫對象文件( .so )。 它們將帶有一個glibconfig.h ,它具有適用於-m32 typedef。

安裝libglib2.0-dev:i686應該是正確的方法。 我假設您最終解決了這個問題,因此您正在構建的應用程序會找到-I包含路徑和-L庫路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM