2012-01-08 86 views
0

我有一個.Net程序,它可以正常使用「mono Program.exe」,但現在我正嘗試在同一臺機器上使用「mkbundle -o prog Program.exe --deps」 ,並且它返回以下錯誤:跳過不兼容的庫(mkbundle)

/usr/bin/ld: skipping incompatible /opt/novell/mono/lib/pkgconfig/../../lib/libmono-2.0.so when searching for -lmono-2.0 /usr/bin/ld: skipping incompatible /opt/novell/mono/lib/pkgconfig/../../lib/libmono-2.0.a when searching for -lmono-2.0 /usr/bin/ld: cannot find -lmono-2.0 collect2: ld returned 1 exit status

系統是x86_64上的CentOS 5.7。我已使用these說明在此係統上安裝了單聲道。有誰知道爲什麼單聲道作品,但mkbundle不?我該如何解決它?

回答

1

您可能安裝了32位版本的mono(它適用於x86_64系統),但mkbundle會嘗試使用默認編譯器設置(64位)進行編譯,並且只能找到32位版本的庫。 要解決此問題,您必須安裝64位版本的mono以匹配您的系統,或者(假設您還安裝了所需的32位庫的其餘部分,如libc和編譯器)使用32位模式下的mkbundle編譯,方法是添加mkbundle在控制檯上打印的編譯器命令行的-m32選項(您還需要使用mkbundle的-c選項)。

+0

對不起,這似乎有點令我困惑。我怎麼知道我是否安裝了32位單聲道或64位版本?單聲道安裝在/ opt/novell/mono /文件夾中,我在那裏看到一個lib64文件夾。但是,當我輸入「mono -V」時,它表示架構是x86。這是什麼意思?另外,如果我正確理解你的解決方案,我需要使用「mkbundle -c -o program Program.exe --deps」,然後呢? – 2012-01-09 08:25:02

+0

如果單聲道-V表示x86有32位可執行文件。確保你只安裝了一個單聲道(在終端上運行'which -a mono')。 – lupus 2012-01-10 10:00:55

+0

對於該解決方案,首先運行mkbundle2 --deps Program.exe並記下編譯器命令行(它看起來像「cc -ggdb ...」),然後使用-c選項再次運行mkbundle2。之後運行前面顯示的編譯器命令行,但也添加-m32選項。 – lupus 2012-01-10 10:03:04