c 二进制 基本操作 基本编译 调试

本文详细介绍使用Clang编译器进行C文件编译、调试及创建静态库的方法,并深入探讨了FFmpeg库中日志记录、文件操作及目录读取等功能的实现,为读者提供全面的Clang与FFmpeg应用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://www.jianshu.com/p/eae8da7caac6

clang -g -o aa aa.c

把 aa.c文件编译成aa 可执行文件

-g 输出错误信息

-O 指令优化的级别 

-o 输入文件

-I  指定头文件的位置

-L 第三方库的文件的位置

-l 指定使用哪个库

 

./aa 执行aa文件

 

 

=========编译过程

预编译

正式编译

链接库

静态链接库

将没有main方法的 c文件编译成一个  .o文件 库文件 供其他应用使用  将生成一个 app.o文件

clang -g -c app.c

==编译一个静态库

libtool -static -o libmylib.a app.o  将app.o文件编译成一个静态库

 clang -g  -o aa aa.c -I . -L . -lmylib  

-I  所应用需要的头文件的位置 

. 点代表当前目录下面

-L 链接文件的位置

. 点代表当前位置下

-lmylib    链接文件的文件名 

============== c文件调试

lldb aa  将aa文件放在 可执行调试中

b main 在main方法上设置断点

break list 查看有多少断点

l 查看源码(list)

r 运行(run)

s 到函数里面去

p 打印变量(printf)

finish 退出当前函数 到上一个函数中去

n    执行下一行 (next)

c  结束调试

quit 退出调试

== 会生成一个 .dYSM文件

 cd dYSM--Contents--Resources--DWARF

dwarfdump aa

=============ffpeg 输入日志信息

ffpeg 日志系统

#include <libavutil/log.h>

int main(int argc,char* argv[]){

    av_log_set_level(AV_LOG_DEBUG);

    av_log(NULL,AV_LOG_INFO,"hello word===\n");

    return 0;

}

==============ffpeg 文件 的删除与重命名

avpriv_io_delete();

avpriv_io_remov();

 clang -g -o ffpeg ffpeg.c -lavutil

 clang -g -o ffpeg ffpeg.c `pkg-config --libs libavformat`

pkg-config --libs libavformat 找到 libavformat的位置

#include <stdio.h>
#include <libavutil/log.h>
#include <libavformat/avformat.h>
int main(int argc,char* argv[]){
 //   av_log_set_level(AV_LOG_DEBUG);
    av_log(NULL,AV_LOG_INFO,"hello word===%s\n","bbbb");
    int result;
    result=avpriv_io_delete("./abc.txt");
     av_log(NULL,AV_LOG_ERROR,"hello word===%d\n",result);
    if(result>=0){
         av_log(NULL,AV_LOG_INFO,"hello word===%s\n","删除成功");
    }else{
         av_log(NULL,AV_LOG_ERROR,"hello word===%s\n","删除失败");
        return -1;
    }
    return 0;
}

重命名

#include <stdio.h>
#include <libavutil/log.h>
#include <libavformat/avformat.h>
int main(int argc,char* argv[]){
 //   av_log_set_level(AV_LOG_DEBUG);
    av_log(NULL,AV_LOG_INFO,"hello word===%s\n","bbbb");
    int result;
    result=avpriv_io_move("./abc.txt","./abc11.txt");
    if(result<0){
         av_log(NULL,AV_LOG_ERROR,"hello word===%s\n","重命名失败");
        return -1;
    }
    return 0;
}

打开文件夹

avio_open_dir()

avio_read_dir() 读取文件中的每一项

avio_close_dir() 关闭文件夹

AVIODirContext  炒作目录的上下文

AVIODirEntry 目录项

#include <stdio.h>
#include <libavutil/log.h>
#include <libavformat/avformat.h>
int main(int argc,char* argv[]){
    AVIODirContext *ctx=NULL;
    AVIODirEntry *entry =NULL;
    int ret;
    av_log_set_level(AV_LOG_DEBUG);
    ret=avio_open_dir(&ctx,"./",NULL);
    if(ret<0){
            av_log(NULL,AV_LOG_ERROR,"hello word===%s\n","打开文件失败");
        return -1;
    }
    while (1) {
     ret=   avio_read_dir(ctx,&entry);
        if(ret<0){
           av_log(NULL,AV_LOG_ERROR,"hello word===%s\n","读取文件失败");
            return -1;
        }
        if(!entry){
            break;
        }
        av_log(NULL,AV_LOG_INFO,"%12"PRId64" %s \n",entry->size,entry->name);
    }
    avio_close_dir(&ctx);
    return 0;
}

编译  

 clang -g -o ffpeg ffpeg.c `pkg-config --libs libavformat` -lavutil

运行

./ffpeg 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值