libav ライブラリを使用して簡単なコードをコンパイルしようとしています。
// Some simple code to demonstrate
#include <libavformat/avformat.h>
int main(int argc, char *argv[]) {
av_register_all();
return 0;
}
私は gcc バージョン 4.2.1 の Mac を使用しています。
を使用してコードを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 に特に関連していますか?