编译C时如何链接文件夹中的所有目标文件?

杜鲁门·普奈尔

所以我有两个文件夹:

/ 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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从Java读取文件夹中的所有文件?

如何使用C读取文件夹中的所有文件

如何列出tomcat文件夹中的所有文件?

如何从Java Resources文件夹中的文件夹获取所有文件的列表

使用CMake自动将文件夹中的所有文件添加到目标吗?

如何.gitignore文件夹中的所有文件/文件夹,而不是文件夹本身?

如何导入文件夹中的所有文件?

如何连接文件夹中的所有JS文件?

Makefile:自动编译所有c文件,将.o文件保留在单独的文件夹中

Webpack编译文件夹中的所有文件

如何随机读取文件夹中的所有文件

取消链接后使用退出时,如何使用php删除文件夹中的所有文件

如何同步目标文件夹中存在的所有文件夹

如何删除所有文件/文件夹,但将根文件夹保留在C#中

如何最好地删除文件夹及其子文件夹中的所有文件

如何在ckfinder中显示所有文件夹,子文件夹和文件

如何使用目录查看文件夹中的所有符号链接,连接点,硬链接?

Javac在尝试使用Linux脚本编译文件夹中的所有Java文件时给出错误

如何访问主文件夹中的所有文件?

如何删除文件夹XXX中的所有文件

如何删除文件夹中除最新X子文件夹以外的所有子文件夹?

如何从C#中的文件夹中选择所有xml文件并解析它们

如何从不存在的(在编译时)文件夹中链接共享库

如何从文件夹中删除所有文件?

如何包含文件夹中的所有源文件?(C ++,MS VS 2013)

如何查找文件夹中的所有硬链接?

将文件夹中的所有内容复制到两个文件目标文件夹中

如何获取该文件夹中的所有文件

如何删除某个文件夹中的所有文件