将ffmpeg的libswresample与MacOS X 10.9与C++链接起来

 blue燃烧的火柴 发布于 2023-02-05 11:55

我试图从C++应用程序链接到ffmpeg的libswresample.我在Mac OS X 10.9上通过Homebrew安装了ffmpeg.一个简单的测试应用程序链接,如果它被编译为C,但如果它被编译为C++则不会.以下是示例代码:

#include 
#include 

int main()
{
  swr_alloc();
  printf("Hello world\n");
  return 0;
}

当编译为C时,clang -I/usr/local/include -L/usr/local/lib -lswresample -o hello hello.c会按预期创建应用程序.使用C++编译时clang++ -I/usr/local/include -L/usr/local/lib -lswresample -o hello hello.cc会导致如下错误:

Undefined symbols for architecture x86_64:
  "swr_alloc()", referenced from:
      _main in hello-9jqOY4.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

但运行nm -a /usr/local/lib/libswresample.dylib包含000000000000d8a9 T _swr_allocfile /usr/local/lib/libswresample.dylib显示/usr/local/lib/libswresample.dylib: Mach-O 64-bit dynamically linked shared library x86_64我认为是预期的.我用gcc/g ++ 编译这个例子也有同样的问题,在使用clang或gcc 编译ffmpeg时我也遇到同样的问题,这让我认为只有一些我不知道的关于链接的东西应该是显而易见的,但我没有找到任何引用,表明它应该是不同的链接C++与C的库,并且链接其他库(例如,sox)对于相同的设置没有任何困难.

我已经看过与Mac OS X 10.9中的链接问题相关的帖子,因为从libstdc ++到libc ++的变化,但添加-stdlib=libstdc++-stdlib=libc++似乎没有区别.添加-mmacosx-version-min=10.6或添加也没有区别10.9.

任何帮助是极大的赞赏.

1 个回答
  • 您必须通知编译器它应该使用C样式名称mangeling. http://en.m.wikipedia.org/wiki/Name_mangling

    extern "C"
    {
    #include <libswresample/swresample.h>
    }
    

    2023-02-05 11:58 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有