提问者:小点点

链接cmake时获取未定义引用错误


我试图将portaudio和opus包含在我的项目中,但是每当我编译时,我都会得到这个错误

Scanning dependencies of target PeersChat
[ 50%] Building CXX object CMakeFiles/PeersChat.dir/main.cpp.obj
[100%] Linking CXX executable PeersChat.exe
CMakeFiles\PeersChat.dir/objects.a(main.cpp.obj): In function `main':
F:/Documents/Programming/Projects/PeersChat/main.cpp:13: undefined reference to `opus_encoder_create'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [CMakeFiles\PeersChat.dir\build.make:86: PeersChat.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles\Makefile2:75: CMakeFiles/PeersChat.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:82: CMakeFiles/PeersChat.dir/rule] Error 2
mingw32-make.exe: *** [Makefile:117: PeersChat] Error 2

这是我的main.cpp

#include <iostream>
#include <portaudio.h>
#include <opus.h>

int main() {

    opus_int32 sampleRate = 8000;
    int channels = 2;

    int error;

    OpusEncoder *enc;
    enc = opus_encoder_create(sampleRate, channels, OPUS_APPLICATION_VOIP, &error);

    return 0;
}

这是我当前的cmake

cmake_minimum_required(VERSION 3.16)
project(PeersChat)

include_directories("F:\\Documents\\Programming\\Libraries\\portaudio\\include")
include_directories("F:\\Documents\\Programming\\Libraries\\opus-1.3.1\\include")

set(CMAKE_CXX_STANDARD 14)

add_executable(PeersChat main.cpp)

有人能写出一个正确的cmake文件来为我解决这个问题吗? 请不要链接我到另一篇文章,因为我可以向你保证,我已经检查了它,它没有帮助。


共1个答案

匿名用户

您需要在cmakelists.txt的末尾添加一行,以便将库链接到可执行文件:

target_link_libraries (PeersChat PRIVATE <the_libraries_to_link>)