Как обеспечить функции, которые не могут быть найдены при связывании?

Когда я пытаюсь скомпилировать свое приложение, я получаю две ошибки:

$ g ++ -static -emit-swf -o CloudClient.swf -I ../ boost / boost_libraries / install-dir / include -I ../ ffm
peg-1.0 / bin / include -L ../ boost / boost_libraries / install-dir / lib -L ../ ffmpeg-1.0 / bin / lib timer.o
audio_encoder.o audio_generator.o video_encoder.o video_generator_rainbow.o sim
ple_synchronizer.o multiplexer.o передатчик.o graph_runner.o cloud_client.o -lswscale -lavformat -lavcodec -lavutil -lboost_system -lboost_date_time -lboost_thread -pthread -lm

../ffmpeg-1.0/bin/lib/libswscale.a: error: undefined reference to 'exp'
../ffmpeg-1.0/bin/lib/libavcodec.a: error: undefined reference to 'log'
collect2: ld returned 1 exit status

Если log а также exp мои проблемы, и если я положу -lm это не помогает мне задаться вопросом, как буквально создавать свои собственные заглушки вместо exp а также log и связать мои библиотеки с ними? ….

1

Решение

Вы могли бы реализовать их в файле C (который компилируется компилятором C, а не компилятором C ++) или в файле C ++, а затем получить внешнюю связь «C». Например:

extern "C" double log(double x)
{
// ...
}

Очевидно, что было бы лучше решить проблему со связью. Вы не должны предоставлять свои собственные версии стандартных подпрограмм библиотеки C.

2

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

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

По вопросам рекламы [email protected]