小编gee*_*del的帖子

OS X链接器无法从仅包含变量的C文件中查找符号

将C库从Linux(Ubuntu)移植到OS X时,我遇到链接器问题.C代码是从Matlab自动生成的,所以理想情况下我不想更改代码本身.

问题似乎是在一个C文件中,它只包含未初始化的变量声明,然后被其他C文件EXTERN实现Matlab算法.OS X链接器显然无法识别此文件中的符号.相同的源代码在Linux上运行良好,所以我想了解OS X链接器的行为方式不同,以及是否有一个标志我可以传递给它来改变行为.

静态库构建时没有错误/警告.但是在构建引用静态库的应用程序时,会抛出以下错误消息(在OS X上):

Undefined symbols for architecture x86_64:
  "_my_var", referenced from:
      _algorithm in libtestlibrary.a(algorithm.o)
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

'nm'表示libtestlibrary.a确实包含符号_my_var.

下面是Matlab代码的简化版本.

图书馆代码:

// DATA.C : declaration of data
#include "data.h"
int my_var;

// DATA.H - extern declaration of data
#ifndef H_DATA
#define H_DATA
extern int my_var;
#endif

// ALGORITHM.C - performs the calculation
#include "data.h"
int algorithm(int x) {
  my_var += x;
  return my_var;
}

//ALGORITHM.H - declaration …
Run Code Online (Sandbox Code Playgroud)

c macos linker ld unix-ar

9
推荐指数
2
解决办法
1285
查看次数

为什么 .ts 格式的 ffmpeg 开始时间不为零?

我正在使用 ffmpeg 将视频转码为 .ts 格式,但在输出文件中出现意外的开始时间。

为了简化事情,我从一个简单的 AVI 文件开始(无音频):

ffmpeg -i in.avi 
...
Input #0, avi, from 'in.avi':
  Metadata:
    encoder         : Lavf55.25.100
  Duration: 00:00:05.00, start: 0.000000, bitrate: 448 kb/s
    Stream #0:0: Video: mpeg4 (Simple Profile) (FMP4 / 0x34504D46), yuv420p, 480x270 [SAR 1:1 DAR 16:9], 24 tbr, 24 tbn, 24 tbc
Run Code Online (Sandbox Code Playgroud)

正如预期的那样, Duration=5s,startTime=0s

但是,如果我转码为 .ts 文件而不进行自定义:

ffmpeg -i in.avi -y out.ts
...
Input #0, avi, from 'in.avi':
  Metadata:
    encoder         : Lavf55.25.100
  Duration: 00:00:05.00, start: 0.000000, bitrate: 448 kb/s
    Stream #0:0: …
Run Code Online (Sandbox Code Playgroud)

video ffmpeg avi

7
推荐指数
1
解决办法
3999
查看次数

标签 统计

avi ×1

c ×1

ffmpeg ×1

ld ×1

linker ×1

macos ×1

unix-ar ×1

video ×1