2016-05-22 12 views
0

я использую версию FFmpeg является 3,0, Xcode версии 7.3.1, время компиляции было сообщено как следующее сообщение об ошибке:ошибка при составлении базы FFmpeg на платформе IOS

Undefined symbols for architecture x86_64: 
"_libiconv", referenced from: 
    _avcodec_decode_subtitle2 in libavcodec.a(utils.o) 
"_libiconv_close", referenced from: 
    _avcodec_open2 in libavcodec.a(utils.o) 
    _avcodec_decode_subtitle2 in libavcodec.a(utils.o) 
"_libiconv_open", referenced from: 
    _avcodec_open2 in libavcodec.a(utils.o) 
    _avcodec_decode_subtitle2 in libavcodec.a(utils.o) 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Мой проект был введен в следующей рамки и библиотеки:

1.VideoToolbox.framework

2.libiconv.2.4.0.tbd

3.libz.tbd

4.libbz2.tbd

+1

вы можете показать нам свой код? Что вы пытались сделать? Посетите http://stackoverflow.com/help/how-to-ask, чтобы узнать, как задать хороший вопрос. – mqpasta

ответ

0

У меня такая же проблема с вами. Я обнаружил, что libiconv.tbd (или libiconv2.tbd или libiconv2.4.0.tbd) поставляется с macOS 10.12 (в моем случае) имеет совместимую проблему, где экспортированные символы: iconv/iconv_open/iconv_close, тогда как ffmpeg вызывает функции libiconv, такие как libiconv/libiconv_open/libiconv_close.

Решение должно удалить libiconv.2.4.0 из фреймворка/библиотеки и одной конкретной версии libiconv.a, где libiconv/libiconv_open/libiconv_close являются экспортированными символами. В моем случае я нашел еще одну копию libiconv.a в/opt/local/lib. Я просто копирую этот файл lib в свой проект и добавляю его.

Пожалуйста, попробуйте и дайте мне знать, сможет ли он решить вашу проблему.

0

Я согласен с Eureka.gh. Коренной причиной должно быть несоответствие символов.
Ниже показан мой результат теста.

LiaotekiMacBook-Pro:lib liaokuohsun$ nm libavcodec.a | grep iconv 
       U _libiconv 
       U _libiconv_close 
       U _libiconv_open 

LiaotekiMacBook-Pro:lib liaokuohsun$ nm libiconv.dylib | grep iconv 
00000000000f2d80 S ___iconv_2VersionNumber 
00000000000f2d50 S ___iconv_2VersionString 
00000000000f4750 D __libiconv_version 
0000000000003174 T _iconv 
00000000000034b7 T _iconv_canonicalize 
0000000000003196 T _iconv_close 
0000000000001cdd T _iconv_open 
00000000000031a3 T _iconvctl 
00000000000032ac T _iconvlist 
0000000000015f0d T _libiconv_relocate 
00000000000f4760 b _libiconv_relocate.initialized 
0000000000015e54 T _libiconv_set_relocation_prefix 

Здесь я предоставляю другое решение.
С некоторыми функциями оболочки в вашем коде эта ошибка ссылки может быть исправлена.

#include <iconv.h> 
iconv_t libiconv_open(const char *tocode, const char *fromcode) 
{ 
    return iconv_open(tocode, fromcode); 
} 

size_t libiconv(iconv_t cd, 
      char **inbuf, size_t *inbytesleft, 
      char **outbuf, size_t *outbytesleft) 
{ 
    return iconv(cd, inbuf, inbytesleft, outbuf, outbytesleft); 
} 

int libiconv_close(iconv_t cd) 
{ 
    return iconv_close(cd); 
}