gpt4 book ai didi

c++ - 编译为 C++ 而不是 C 时,libav 中 undefined symbol

转载 作者:行者123 更新时间:2023-11-30 02:02:15 25 4
gpt4 key购买 nike

我正在尝试使用 libav 库编译一些简单的代码。

// Some simple code to demonstrate
#include <libavformat/avformat.h>

int main(int argc, char *argv[]) {
av_register_all();
return 0;
}

我在 Mac 上,gcc 版本为 4.2.1。

当我尝试使用 C 编译代码时

gcc -o main main.c -lavformat

然后代码编译和链接正常。但是,当我尝试使用

将其编译为 C++ 时
g++ -o main main.cpp -lavformat

它给我 undefined symbol 错误:

Undefined symbols for architecture x86_64:
"av_register_all()", referenced from:
_main in ccQ23HMe.o

当我使用 -v 选项运行时,运行的链接步骤是:

// gcc
"/usr/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.8.0 -o c
/var/folders/r0/n22t1hyn7ts92jxgd9_pn8yw0000gn/T/main-uUfZkM.o -lavformat
-lSystem /usr/bin/../lib/clang/4.1/lib/darwin/libclang_rt.osx.a

// g++
"/usr/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.8.0 -o c
/var/folders/r0/n22t1hyn7ts92jxgd9_pn8yw0000gn/T/main-5QU6fj.o -lavformat
-lstdc++ -lSystem /usr/bin/../lib/clang/4.1/lib/darwin/libclang_rt.osx.a

这里,唯一的区别是在链接中添加了-lstdc++

为什么会出现这些 undefined symbol 错误?是否有某种原因只是将库添加到链接中会导致这些 undefined symbol ?或者是否有其他原因导致此问题,可能与 libavformat 特别相关?

最佳答案

libav“常见问题”列表 covers this exact scenario !

Here, the only difference is the addition of -lstdc++ to the linking.

不,那是因为您使用的是具有不同默认调用约定的不同语言。

av_register_all如标题中声明的那样,未标记为 extern "C" ,而实际编译库中的定义需要良好的老式 C 调用约定。

extern "C" 包围您的 libav 包含.

关于c++ - 编译为 C++ 而不是 C 时,libav 中 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13463279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com