我已经杀了一个星期试图在我的一个项目中解决一个神秘的问题,我没有想法.
我写了一个Go包,打算播放包含OpenAL的声音......非常基本的东西.我让它在我的Xubuntu 14.04(32位)上工作,所以我启动到Windows(7,也是32位)以便移植它......这就是问题开始的地方.
每当我尝试使用我的音频包时,该程序就会崩溃,并使用c0000005.我试图通过gdb运行它,并惊讶地发现它没有问题,它甚至播放我的测试声音.
时间过去了,不知道该怎么做,我下载了OpenAL Soft源代码并开始添加printfs - 并发现它崩溃的确切行:
http://repo.or.cz/w/openal-soft.git/blob/HEAD:/Alc/backends/dsound.c#l361
对于那些懒得点击链接(或链接停止工作),这是对DirectSoundCreate的调用.再次运行调试器,我在调用之前和之后看到了我的打印,并且在它们之间创建了4个新线程.
这些是Go文件中的相关内容:
package audio
/*
#cgo CFLAGS: -I"../libraries/include"
#cgo windows,386 LDFLAGS: ../libraries/lib/windows/x86/OpenAL32.dll
#cgo windows,amd64 LDFLAGS: ../libraries/lib/windows/x64/OpenAL32.dll
#cgo linux LDFLAGS: -lopenal
#include "audio.h"
*/
import "C"
import (
"errors"
)
var context *C.ALCcontext
func Init() error {
context = C.initAudio() // it crashes on this line
if context == nil {
return errors.New("could not initialize audio")
}
SetActiveListener(NewListener())
return nil
}
Run Code Online (Sandbox Code Playgroud)
这是实际进行OpenAL调用的C文件:
#include "audio.h"
#include <string.h>
#include <stdio.h>
ALCcontext* initAudio() {
ALCdevice* …Run Code Online (Sandbox Code Playgroud)