LNK2019: неразрешенный внешний символ _kiss_fftr_allo c, указанный в функции "void __cdecl mainfun c (void) - PullRequest
0 голосов
/ 04 апреля 2020

Я пытался использовать 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)

, а каталог проекта имеет вид:

enter image description here

Когда я строю этот код, я получаю следующую ошибку:

 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

Я использовал MSV C и MinGW (g ++) для компиляции этого код, но в обоих случаях я получаю ту же ошибку.

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 10 апреля 2020

Я решил это сам. Я только что сделал небольшие изменения в 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 ( один мне понадобился). Поэтому, когда я включил только файл Kiss_fftr. c в мой файл cmakelists.txt. Это решило мою ошибку.

...