linker — неопределенные символы в libav при компиляции как C ++, но не как C

Я пытаюсь скомпилировать простой код с использованием библиотек 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?

1

Решение

libav Список часто задаваемых вопросов покрывает это точный сценарий!

Здесь единственным отличием является добавление -lstdc ++ к линковке.

Нет, это так, и вы используете другой язык с другими соглашениями о вызовах по умолчанию.

av_register_all как заявлено в шапке не помечено extern "C"тогда как для определения в фактической скомпилированной библиотеке требуется старое доброе соглашение о вызовах языка Си.

Окружи свой libav включает в себя с extern "C",

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector