我正在尝试在自己的程序中使用 ffmpeg 库,但无法链接它们。具体来说,在我的基本程序中,我收到了 fatal error LNK1120: 1 unresolved externals
错误。该程序是:
#include <iostream>
#include <libswresample/swresample.h>
int main()
{
std::cout << "Hello World!\n";
struct SwrContext* swr_ctx = swr_alloc();
if (!swr_ctx) {
std::cout << "Could not allocate resampler context";
}
}
我从 https://ffmpeg.zeranoe.com/builds/ 下载了预编译库,特别是包含 .def/.lib 以及 .dll 文件的 Windows x64 开发包。
我最初尝试(并打算最终使用)cmake 来生成 MSVC sln 文件。 cmake文件是:
cmake_minimum_required(VERSION 3.5)
project(ffmpeg_jni)
# Find the JNI bits
find_package(JNI)
# Search for the ffmpeg libraries
set(ffmpeg_include_hint "ffmpeg-dev/include")
set(ffmpeg_lib_hint "ffmpeg-dev/lib")
find_path(SWRESAMPLE_INCLUDE_DIR libswresample/swresample.h PATHS ${ffmpeg_include_hint})
find_library(SWRESAMPLE_LIBRARY swresample PATHS ${ffmpeg_lib_hint})
add_library(swresample SHARED IMPORTED)
set_target_properties(swresample PROPERTIES
IMPORTED_LOCATION "${SWRESAMPLE_LIBRARY}"
IMPORTED_IMPLIB "${SWRESAMPLE_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${SWRESAMPLE_INCLUDE_DIR}"
)
# Setup basic include dirs
set(includeDIRS
src/main/cpp
${JAVA_INCLUDE_PATH})
# Setup windows specific includes
set(includeDIRS
${includeDIRS}
${JAVA_INCLUDE_PATH}/Win32)
include_directories(${includeDIRS})
set(WRAPPER_SRC
src/main/cpp/logging.c
src/main/cpp/logging.h
src/main/cpp/main.cpp)
add_library(ffmpeg_jni SHARED ${WRAPPER_SRC})
target_link_libraries(ffmpeg_jni PRIVATE swresample)
生成的解决方案可以编译并且可以正确访问包含文件(Visual Studio 甚至可以带我去声明)。问题出现在我收到的构建的链接阶段:
error LNK2019: unresolved external symbol "struct SwrContext * __cdecl swr_alloc(void)" (?swr_alloc@@YAPEAUSwrContext@@XZ) referenced in function main
考虑到我在 cmake 中可能有问题,因为我对它还是很陌生,所以我尝试按照我在无数在线演示中为项目添加外部库的方法制作一个简单的演示作为纯 Visual Studio 项目。具体包括:
在这一点上,我进行的任何搜索工作都向我展示了不同的人在做同样的事情,这告诉我我已经看太久了,无法自己找到答案,而且我错过/不理解的一些微不足道的东西。
最佳答案
如果您将项目编译为 c++,则包含 FFmpeg 头文件,如下所示,它告诉您的 c++ 编译器将 FFmpeg 头文件作为 C 而不是 C++ 处理。
extern "C" {
#include <libswresample/swresample.h>
}
关于visual-studio - MSVC fatal error LNK1120 : 1 unresolved externals with FFMPEG libs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57518677/