3

作为我学习 C++ 的一部分,我正在自学如何将 wav 文件读入 C++。我在网上找到了许多推荐以下库的资源:libsnfile 库 所以我按照下面的一些教程来测试库的基本功能,但我无法使用 Visual Studio 2010 编译该库。

我在网上搜索了以下错误,但没有找到任何对我的特定错误有用的东西。我下载了此处找到的 libsndfile C++ Windows 安装程序。我使用的是 32 位版本,因为我使用的是 win32 C++ 控制台版本。但是,我的 Visual Studio 是 64 位的。下载安装程序后,我执行了以下操作:

我进入了 Visual Studio。在我的项目下,我做了以下事情:

在项目属性中: 1. VC++

包含 >> 添加 ...\libsnfile\include 库 >> 添加 ...\libsnfile\lib 2. C\C++ 添加以下目录作为附加依赖
项 ...\libsnfile\lib\libsndfile-1.lib

我这样做是为了将此第三方库添加到我的项目中。在此之后,为了测试,我运行了以下代码:

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <sndfile.h>

int _tmain(int argc, _TCHAR* argv[])
{
    printf("This is a test\n");

   getchar();
   return 0; 
}

我对其进行了编码以确保我可以访问我的程序中的 sndfile.h 并编译所有内容。当我尝试实现以下代码时出现问题:

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <sndfile.h>

int _tmain(int argc, _TCHAR* argv[])
{
    printf("This is a test\n");


    //This will be the length of the buffer used to hold samples while the program processes them. 


    //A SNDFILE is like FILE in a standard C library. Consequently, the sf_open_read and sf_open_write functions will return an 
    //SNDFILE* pointer when they successfully open the specified file. 
    SNDFILE* sf = NULL; 

    /*SF_INFO will obtain information of the file we wish to load into our program. */
    SF_INFO info; 


    /*This is where the program will open the WAV file */
    info.format = 0; 
    sf = sf_open("C:\Users\GeekyOmega\Desktop\gameon.wav", SFM_READ, &info);
    if(sf == NULL)
    {
        printf("Failed to open the file.\n");
        exit(-1);
    }

    getchar();
    return 0;
}

然后,当我尝试运行我的程序时,在 Visual Studio 中单击运行时出现系统错误。它说,

The program can't start because libsnfile-1.dll is missing from your computer. 
Try reinstalling the program to fix this problem.` 

我尝试了 64 位 Windows 安装程序并尝试过,但它不起作用。有人明白我在做什么吗?我在 Windows 7 上运行 Visual Studio 的 2010 作为我的开发环境。

如果我犯了一个愚蠢的错误,我深表歉意,但如果有人能帮助我,我将不胜感激。正如我上面谈到的,我尝试了一些 hacky 修复,但没有任何效果。

编辑:我也知道这个线程here,但这对我当前的问题没有任何意义,因为我没有做他们正在谈论的任何这条路径的东西。

热烈的问候, GeekyOmega

4

1 回答 1

2

我解决了这个问题。我认为,对于未来的读者来说,这是一个非常普遍的问题。我将 .dll 放在了我的 Visual Studio 项目的调试文件夹中。否则,Visual Studio 看不到 .dll 文件。在此之后,程序按预期启动并运行。如果这不能为您解决问题,那么我建议可能发生其他事情。

于 2012-10-27T23:51:09.753 回答