各位大神,请问有谁知道怎么解决ffmpeg库冲突的问题,我在播发视频的时候需要用到ffmpeg的库,但是有时候平台自己会用到ffmpeg,这样的话会导致编译不通过,请问有谁知道如何解决,附加一句,平台的东西我改不了。
编译错误是什么?
duplicate symbol 显示链接错误,请问你以前遇见过么,有什么解方案么,谢谢
@czj9001: 先确认下,我们说的是 C++ ,然后你把编译器的错误提示给截图或内容贴出来,最后把你的解决方案描述清楚点,比如是动态链接还是静态链接,平台自己会用到 ffmpeg 跟你的项目有什么关系?
@Launcher: 不好意思,因为公司的原因,编译错误的截图或者内容不被允许贴出,请你谅解。我做的东西就是在平台上面做一个类似播放器的东西,这个平台没有限制哪个平台,就是想兼容各个平台,有些平台驱动中用了ffmpeg ,有些平台没有用,就是一些底层用了ffmpeg的时候,会和我上层冲突,就是想解决怎么样才不会冲突,我上层用ffmpeg进行demuxer,拿出es数据,我是通过动态连接的形式.so将ffmpeg拷入平台中去的,希望我描述清楚了,谢谢
@czj9001: 也就是说你既链接了 ffmpeg,又链接了第三方的库,而第三方的库也链接了 ffmpeg。第三方库是静态链接的 ffmpeg 吗?
@Launcher: 恩,是的,我连接了ffmpeg,又连接了第三方库,第三方库根据不同平台有可能连接了ffmpeg库,也可能没有,因为第三方平台库只是以库(.so)的形式给我们的,不知道他里面是静态还是动态连接ffmpeg,我需要解决的问题就是在第三方库连接了ffmpeg的库的时候,解决和自己连接的库冲突的问题。第三方静态还是动态连接ffmpeg应该没太有关系把?
@czj9001: 如果都是动态连接到 ffmpeg 就不会有 duplicate symbol 问题,因为是共享使用 ffmpeg 动态库,只有当有一方使用了静态链接时才会有此问题。你可以自己写两个库来测试下。
@Launcher: 那如果是静态连接呢,这种库冲突的问题怎么解决呢
@czj9001: 对 Linux 不熟悉,我只能提供一种比较通用但是使用起来麻烦的方法,运行时绑定 ffmpeg,就是不要在编译期就链接 ffmpeg,而是自己根据需要定义一些 ffmpeg 的函数,然后通过函数指针的方式调用。
@Launcher: 因为用到了ffmpeg库里面比较多的函数,这种方法会不会工作量有点大啊?还有网上说改命名空间,但是这样改的话工作量也是比较大的
@czj9001: 你自己选择吧,如果你常用 ffmpeg 的话,运行时绑定是比较经济的方式。
将不同版本的库注册到GAC中
麻烦能说详细点么? 是以前你也遇到过这个问题, 用这种方法解决了么?
@czj9001: 我只是提供一个解决思路
@dudu:哦 谢谢 那请问你以前遇到过这样的问题么
@czj9001: 没遇到过
@dudu: 好的 谢谢你的思路