所以我有两个文件夹:
/ffmpeg
/myproj
在 myproj 中我有一个主要方法:
#include <stdio.h>
#include <stdlib.h>
#include "libavformat/avformat.h"
#include "libavcodec/avcodec.h"
int main(int argc, char *argv[])
{
AVFormatContext *pFormatCtx = NULL;
if (avformat_open_input(&pFormatCtx, argv[1], NULL, 0) != 0)
return -1;
return EXIT_SUCCESS;
}
我正在尝试像这样编译这个文件:
cc main.c -I../ffmpeg ../ffmpeg/libavformat/utils.o
并且收到此错误:
"_ffio_set_buf_size", referenced from:
_ff_configure_buffers_for_index in utils.o
ld: symbol(s) not found for architecture x86_64
我明白它的意思 - 我需要包含 utils.o 的依赖项,存储在文件 utils.d 中。但我该如何在命令行上执行此操作呢?有大量、大量、大量的依赖项,我知道人们不会手动输入这些!
最佳答案
你的方向错了,你应该链接到共享库(libav)。
将这些行添加到您的 Makefile
(并根据您的设置修复路径):
LIBAV_PATH = /path/to/ffmpeg/lib/pkgconfig/
PKG_DEPS = libavformat libswscale libswresample libavutil libavcodec
CFLAGS = `PKG_CONFIG_PATH=$(LIBAV_PATH) pkg-config --cflags $(PKG_DEPS)`
LDFLAGS = `PKG_CONFIG_PATH=$(LIBAV_PATH) pkg-config --libs $(PKG_DEPS)`
在PKG_DEPS
中,我包含了许多库,您可能不需要所有这些库,请删除那些不必要的库(但稍后再做 - 首先按原样尝试)。
你的 all:
行应该是这样的:
all: main.c
@gcc -I$(INCLUDE) main.c -o test.out $(CFLAGS) $(LDFLAGS)
关于c - 编译C时如何链接文件夹中的所有目标文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52451068/