所以我有两个文件夹:
/ 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文件中。但是,如何在命令行上执行此操作?有很多吨的依赖关系,我知道人们不会手动输入这些信息!
答案 0 :(得分:1)
您的方向错误,应该与共享库(libav)链接。
将这些行添加到您的@overload
def process(response: None) -> None:
...
@overload
def process(response: int) -> Tuple[int, str]:
...
@overload
def process(response: bytes) -> str:
...
def process(response):
<actual implementation>
中(并相应地更改您的设置的路径):
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:
答案 1 :(得分:0)
您可以使用Makefile为您完成所有工作。根据您的情况,您可以执行-
HEADERS=$(wildcard ../ffmpeg/*.h)
DEPENDS=$(wildcard ../../ffmpeg/libavformat/*.o)
TARGET=a.out
all: $(TARGET)
main.o: main.c $(HEADERS)
$(CC) main.c -c -I../ffmpeg -o main.o
$(TARGET): main.o $(DEPENDS)
$(CC) $^ -o $@
答案 2 :(得分:0)
您将需要使用makefile来包含构建二进制文件所需的所有目录。
这是一个简单的Makefile
示例:
INCLUDE = \
$(shell find ~/code/src/root/ -type d | sed s/^/-I/)
all: main.c
@gcc -I$(INCLUDE) main.c -o test.out
clean:
@rm test.out
运行make all
将生成main.c
文件,并包括~/code/src/root/
下的所有目录。另外,您可以在外壳程序上运行find ~/code/src/root/ -type d | sed s/^/-I/
来查看所包含的所有目录。
希望这会有所帮助!