[英]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.