經過數週的努力,我設法編寫了使用LLVM進行JIT編譯的F#程序。但是,每當我跑我在Visual Studio 2010程序中附帶的調試器(按F5鍵,IE)我得到以下警告:來自LLVM綁定的不平衡堆棧警告
現在,我使用的時候得到這樣的警告,每單的PInvoke呼叫我Windows 7的上網本,但我只使用我的Windows Vista桌面時撥打一些電話。
其他人觸及此問題似乎已通過向要求ANSI字符串的PInvoke調用或CDecl
調用約定添加屬性來解決此問題。我發現更改調用約定可以修復Windows Vista桌面上的警告,但是沒有可用的調用約定(或ANSI格式字符串)修復Windows 7上網本上的警告。任何想法如何解決這一問題?
請注意,這兩臺機器都是完全32位的x86。
編輯
人們張貼評論,要求repros。重現此問題最簡單的方法是按照我記錄的here指示安裝LLVM和llvm-fs,並運行給出的任何示例程序。他們都在我的上網本上打電話給LLVM的所有問題。
替代地,下面的代碼(從LLVM-FS導出)應REPRO問題,而不需要LLVM-FS:
open System.Runtime.InteropServices
[<DllImport("LLVM-3.0.dll",
EntryPoint="LLVMModuleCreateWithName",
CharSet=CharSet.Ansi,
CallingConvention=CallingConvention.Cdecl)>]
extern void *moduleCreateWithNameNative(string ModuleID)
let mdl = moduleCreateWithNameNative "foo"
注意,在原來的C頭文件中的相應定義是:
typedef struct LLVMOpaqueModule *LLVMModuleRef;
...
LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);
發表一個小例子來說明問題。 – 2012-03-04 15:32:11
如果你不知道你究竟在做什麼*,恐怕我們無法幫助你。向我們展示您的代碼(小部分),展示問題! – svick 2012-03-04 15:45:18
你是用單聲道還是MS搭建的FSC構建F#代碼? – 2012-03-04 15:55:50