g ++ в Snow Leopard выдает ошибки связывания в следующем фрагменте кода
test.cpp
#include <iostream>
using namespace std;
#include <libavcodec/avcodec.h> // required headers
#include <libavformat/avformat.h>
int main(int argc, char**argv) {
av_register_all(); // offending library call
return 0;
}
Когда я пытаюсь скомпилировать это с помощью следующей команды
g++ test.cpp -I/usr/local/include -L/usr/local/lib \
-lavcodec -lavformat -lavutil -lz -lm -o test
Я получаю ошибку
Неопределенные символы:
"av_register_all ()", на которую ссылаются из:
_main в ccUD1ueX.o
ld: символ (ы) не найден
collect2: ld вернул 1 статус выхода
Интересно, если у меня есть эквивалентный код c,
test.c
#include <stdio.h>
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
int main(int argc, char**argv) {
av_register_all();
return 0;
}
GCC компилирует это просто отлично
gcc test.c -I/usr/local/include -L/usr/local/lib \
-lavcodec -lavformat -lavutil -lz -lm -o test
Я использую Mac OS X 10.6.5
$ g++ --version
i686-apple-darwin10-g++-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)
$ gcc --version
i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5664)
FFMPEG libavcodec, libavformat и т. Д. Являются библиотеками C, и я построил их на своем компьютере следующим образом:
./configure --enable-gpl --enable-pthreads --enable-shared \
--disable-doc --enable-libx264
make && sudo make install
Как и следовало ожидать, libavformat действительно содержит символ av_register_all
$ nm /usr/local/lib/libavformat.a | grep av_register_all
0000000000000000 T _av_register_all
00000000000089b0 S _av_register_all.eh
Я склонен полагать, что g ++ и gcc имеют разные представления о библиотеках на моем компьютере. g ++ не может подобрать нужные библиотеки. Любая подсказка?