Как я могу заставить pianobarfly правильно скомпилировать на OS X? - PullRequest
1 голос
/ 02 октября 2011

Я пытаюсь заставить pianobarfly работать на OS X и не могу заставить его правильно скомпилироваться.

Выбранный текст из документа установки:

Dependencies
------------

gmake
libao               http://www.xiph.org/ao/
libfaad2            http://www.audiocoding.com/downloads.html
AND/OR libmad       http://www.underbit.com/products/mad/
pthreads
libid3tag           http://www.underbit.com/products/mad/
UTF-8 console/locale!



Building
--------

If you have all of the dependencies listed above just type

    make clean && make

NOTE: The above won't work on Mac OS X (Snow Leopard) since c99 targets i386
and cc (gcc4.2) targets x86_64. If you've built supporting libraries
(libao, etc.) using gcc, you'll be unable to link. You can work around
this issue by overriding CFLAGS[1]

    make clean && make CFLAGS="-O2 -DNDEBUG -W64" && make DISABLE_FAAD=1

Я думаю, что у меня есть все зависимости, за исключением того, что я не уверен, есть ли у меня pthreads или нет, и я предполагаю, что моя системная настройка по умолчанию UTF-8 console/locale!

Я использовал homebrew для установки зависимостей, которых у меня не было, например faad2 и libid3tag, но я не собирался ничего всплывать в Google об установке pthreads или как узнать, есть ли у меня это уже или нет.

Во всяком случае, когда я пытаюсь собрать pianobarfly, я получаю следующее:

####:pianobarfly user$ make clean && make CFLAGS="-O2 -DNDEBUG -W64" && make DISABLE_FAAD=1
rm -f src/main.o src/player.o src/settings.o src/terminal.o src/ui_act.o src/ui.o\
src/ui_readline.o src/ui_dispatch.o src/fly.o src/fly_id3.o src/fly_mp4.o\
src/libpiano/crypt.o src/libpiano/piano.o src/libpiano/xml.o\
src/libwaitress/waitress.o src/libwaitress/waitress.o/test.o \
            src/libezxml/ezxml.o src/libpiano/crypt.lo src/libpiano/piano.lo\
          src/libpiano/xml.lo src/libwaitress/waitress.lo \
            src/libezxml/ezxml.lo pianobarfly libpiano.so* libpiano.a waitress-test
c99 -O2 -DNDEBUG -W64 -I src/libpiano -I src/libwaitress \
            -I src/libezxml -DENABLE_FAAD \
            -DENABLE_MAD -DENABLE_ID3TAG -c -o src/main.o src/main.c
c99 -O2 -DNDEBUG -W64 -I src/libpiano -I src/libwaitress \
            -I src/libezxml -DENABLE_FAAD \
            -DENABLE_MAD -DENABLE_ID3TAG -c -o src/player.o src/player.c
c99 -O2 -DNDEBUG -W64 -I src/libpiano -I src/libwaitress \
            -I src/libezxml -DENABLE_FAAD \
            -DENABLE_MAD -DENABLE_ID3TAG -c -o src/settings.o src/settings.c
c99 -O2 -DNDEBUG -W64 -I src/libpiano -I src/libwaitress \
            -I src/libezxml -DENABLE_FAAD \
            -DENABLE_MAD -DENABLE_ID3TAG -c -o src/terminal.o src/terminal.c
c99 -O2 -DNDEBUG -W64 -I src/libpiano -I src/libwaitress \
            -I src/libezxml -DENABLE_FAAD \
            -DENABLE_MAD -DENABLE_ID3TAG -c -o src/ui_act.o src/ui_act.c
c99 -O2 -DNDEBUG -W64 -I src/libpiano -I src/libwaitress \
            -I src/libezxml -DENABLE_FAAD \
            -DENABLE_MAD -DENABLE_ID3TAG -c -o src/ui.o src/ui.c
c99 -O2 -DNDEBUG -W64 -I src/libpiano -I src/libwaitress \
            -I src/libezxml -DENABLE_FAAD \
            -DENABLE_MAD -DENABLE_ID3TAG -c -o src/ui_readline.o src/ui_readline.c
c99 -O2 -DNDEBUG -W64 -I src/libpiano -I src/libwaitress \
            -I src/libezxml -DENABLE_FAAD \
            -DENABLE_MAD -DENABLE_ID3TAG -c -o src/ui_dispatch.o src/ui_dispatch.c
c99 -O2 -DNDEBUG -W64 -I src/libpiano -I src/libwaitress \
            -I src/libezxml -DENABLE_FAAD \
            -DENABLE_MAD -DENABLE_ID3TAG -c -o src/fly.o src/fly.c
src/fly.c: In function ‘_BarFlyParseCoverArtURL’:
src/fly.c:733: warning: implicit declaration of function ‘strndup’
src/fly.c:734: warning: assignment makes pointer from integer without a cast
c99 -O2 -DNDEBUG -W64 -I src/libpiano -I src/libwaitress \
            -I src/libezxml -DENABLE_FAAD \
            -DENABLE_MAD -DENABLE_ID3TAG -c -o src/fly_id3.o src/fly_id3.c
c99 -O2 -DNDEBUG -W64 -I src/libpiano -I src/libwaitress \
            -I src/libezxml -DENABLE_FAAD \
            -DENABLE_MAD -DENABLE_ID3TAG -c -o src/fly_mp4.o src/fly_mp4.c
c99 -O2 -DNDEBUG -W64 -I src/libpiano -I src/libwaitress \
            -I src/libezxml -DENABLE_FAAD \
            -DENABLE_MAD -DENABLE_ID3TAG -c -o src/libpiano/crypt.o src/libpiano/crypt.c
c99 -O2 -DNDEBUG -W64 -I src/libpiano -I src/libwaitress \
            -I src/libezxml -DENABLE_FAAD \
            -DENABLE_MAD -DENABLE_ID3TAG -c -o src/libpiano/piano.o src/libpiano/piano.c
c99 -O2 -DNDEBUG -W64 -I src/libpiano -I src/libwaitress \
            -I src/libezxml -DENABLE_FAAD \
            -DENABLE_MAD -DENABLE_ID3TAG -c -o src/libpiano/xml.o src/libpiano/xml.c
c99 -O2 -DNDEBUG -W64 -I src/libpiano -I src/libwaitress \
            -I src/libezxml -DENABLE_FAAD \
            -DENABLE_MAD -DENABLE_ID3TAG -c -o src/libwaitress/waitress.o src/libwaitress/waitress.c
c99 -O2 -DNDEBUG -W64 -I src/libpiano -I src/libwaitress \
            -I src/libezxml -DENABLE_FAAD \
            -DENABLE_MAD -DENABLE_ID3TAG -c -o src/libezxml/ezxml.o src/libezxml/ezxml.c
c99 -O2 -DNDEBUG -W64  src/main.o src/player.o src/settings.o src/terminal.o src/ui_act.o\
    src/ui.o src/ui_readline.o src/ui_dispatch.o src/fly.o src/fly_id3.o src/fly_mp4.o\
    src/libpiano/crypt.o src/libpiano/piano.o src/libpiano/xml.o \
            src/libwaitress/waitress.o src/libezxml/ezxml.o -lao -lpthread -lm \
            -lfaad -lmad -lid3tag -o pianobarfly
Undefined symbols for architecture x86_64:
  "_strndup", referenced from:
      _BarFlyOpen in fly.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [pianobarfly] Error 1
####:pianobarfly user$

Ответы [ 2 ]

1 голос
/ 05 октября 2011

Это было решено в мастере и разработке pianobarfly.Обратите внимание, что существует проблема / патч, доступный для homebrew, который решает проблему, когда pkg-config не генерировался для id3tag.pc.Этот патч (пока) не был интегрирован в homebrew.

См .: https://github.com/mxcl/homebrew/pull/7973

Также см .: https://github.com/ghuntley/pianobarfly/issues/3

0 голосов
/ 03 октября 2011

Это ошибка переносимости в программе, которую вы пытаетесь создать: предполагается, что strndup() доступно, а его нет.

К счастью, реализовать собственную замену strndup тривиально, учитывая описание того, что она делает.

Или вы можете проверить fly.c: возможно, замена strndup на strdup также работает.

...