我正在尝试使用 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 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++
到链接。
为什么会出现这些未定义的符号错误?是否有某些原因简单地将库添加到链接会导致这些未定义的符号?还是有其他原因导致此问题,可能与 libavformat 相关?