LNK2019:函数“void __cdecl mainfunc(void)”中引用的未解析外部符号 _kiss_fftr_alloc

Posted

技术标签:

【中文标题】LNK2019:函数“void __cdecl mainfunc(void)”中引用的未解析外部符号 _kiss_fftr_alloc【英文标题】:LNK2019: unresolved external symbol _kiss_fftr_alloc referenced in function "void __cdecl mainfunc(void) 【发布时间】:2020-04-04 10:44:06 【问题描述】:

我一直在尝试在我的项目中使用 Kiss FFT。我在我的项目文件夹中克隆了这个存储库: https://github.com/mborgerding/kissfft

我点击此链接在我的项目中使用它:https://github.com/berndporr/kiss-fft

我正在使用 Clion 来构建这个项目。我的代码如下:

void mainfunc()

    SetConsoleTitleA("PCM Audio Example");

int nfft = 1920;

int is_inverse_fft;


kiss_fftr_cfg cfg = kiss_fftr_alloc(nfft, is_inverse_fft, 0, 0);

kiss_fft_scalar* cx_in = new kiss_fft_scalar[nfft];
kiss_fft_cpx* cx_out = new kiss_fft_cpx[nfft / 2 + 1];


std::string filename = "mixed";

BitDepth* server_buffer = new BitDepth[NUM_SAMPLES];
BitDepth* client_buffer = new BitDepth[NUM_SAMPLES];

BitDepth* buffer = new BitDepth[528000];

memset(server_buffer, 0, NUM_SAMPLES * sizeof(BitDepth));
memset(client_buffer, 0, NUM_SAMPLES * sizeof(BitDepth));

memset(buffer, 0, NUM_SAMPLES * sizeof(BitDepth));

server_sineWave(server_buffer, 500.0);
client_sineWave(client_buffer, 0.0);

mix(buffer, server_buffer, client_buffer, 200);

/* Here mixing is done and output is in buffer array */


for (int i = 0; i < 528000; i++)

    cx_in[i] =static_cast<float>(buffer[i]);



kiss_fftr(cfg, cx_in, cx_out);

for (int i = 0; i < (nfft / 2 + 1); i++)

    cout << "Real value :  " << cx_out[i].r << " Imaginary Value : " << cx_out[i].i << endl;



writeWaveFile(std::string(filename + std::string(".wav")).c_str(), buffer);
delete[] buffer;

std::cout << filename << ".wav written!" << std::endl;
std::cin.get();

CMakeLists.txt 如下:

cmake_minimum_required(VERSION 3.13)
project(beep)

set(CMAKE_CXX_STANDARD 14)

include_directories(kissfft kissfft/test kissfft/tools)
add_executable(beep Beep_Generator.cpp)

项目目录如下:

当我构建此代码时,我收到以下错误:

 error LNK2019: unresolved external symbol _kiss_fftr_alloc referenced in function "void __cdecl mainfunc(void)" (?mainfunc@@YAXXZ)
beep.exe : fatal error LNK1120: 1 unresolved externals

我同时使用了 MSVC 和 MinGW(g++) 来编译这段代码,但在这两种情况下我都遇到了同样的错误。

我该如何解决这个问题?

【问题讨论】:

您如何链接 与 Kissfft 库?你的CMakeLists.txt 文件的内容是什么? 在这种情况下我是新手,但这是我的 CmakeLists.txt:cmake_minimum_required(VERSION 3.13) project(beep) set(CMAKE_CXX_STANDARD 14) include_directories(kissfft Kissfft/test Kissfft/tools) add_executable(beep Beep_Generator.cpp) 【参考方案1】:

我自己解决了。我只是在 CmakeLists.txt 中稍作修改:

cmake_minimum_required(VERSION 3.13)
project(beep)
set(CMAKE_CXX_STANDARD 14)
link_directories(C:/MinGW/lib)
find_package (Python3 COMPONENTS Interpreter NumPy)
include_directories(C:/Python37/include/)
link_libraries(C:/Python37/libs/libpython37.a Python3::NumPy)
include_directories( kissfft kissfft/tools matplotlib-cpp )
add_executable(beep kissfft matplotlib-cpp  kissfft/tools/kiss_fftr.c  kissfft/_kiss_fft_guts.h Beep_Generator.cpp plottingVector.h)

在我的项目中,我真的不知道为什么会发生这种情况,但我无法同时使用 KISS_FFT 和 KISS_FFTR(我需要的那个)。所以当我在我的 cmakelists.txt 中只包含 Kiss_fftr.c 文件时。它解决了我的错误。

【讨论】:

以上是关于LNK2019:函数“void __cdecl mainfunc(void)”中引用的未解析外部符号 _kiss_fftr_alloc的主要内容,如果未能解决你的问题,请参考以下文章

python setup.py安装错误LNK2019:函数致命错误LNK1120中引用的无法解析的外部符号fmin:

LNK2019:未解析的外部符号,但我已对函数进行了编码

使用 C++ Dll 的 LNK2019 构造函数/析构函数

错误 LNK2019 - 抽象类中的虚拟析构函数 [重复]

LNK2019:未解析的外部符号 _main 在函数 ___tmainCRTStartup 中引用

error LNK2019