簡體   English   中英

嘗試編譯spdif-loop時出現“ undefined reference”錯誤消息

[英]“undefined reference” error messages when trying to compile spdif-loop

我正在嘗試在運行Ubuntu 14.04的計算機上編譯spdif-loop 它在GitHub頁面上說要求是ffmpeglibavlibao 我只有很少的經驗,但是我想看看make文件了解更多詳細信息,並找到以下行:

LDFLAGS+=       -lavcodec -lavformat -lavdevice -lavutil -lao -lm

我的猜測是,我可以像這樣安裝必要的依賴項:

sudo apt-get install libavcodec-dev libavformat-dev libavdevice-dev libavutil-dev libao-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
libao-dev is already the newest version.
libavcodec-dev is already the newest version.
libavdevice-dev is already the newest version.
libavformat-dev is already the newest version.
libavutil-dev is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.

當我嘗試編譯時,得到以下結果:

livewire@za20:~/Projects/Software/spdif-loop$ make
cc -Wall -std=c99 -g  -lavcodec -lavformat -lavdevice -lavutil -lao -lm  spdif-loop.c   -o spdif-loop
/tmp/ccGCH40C.o: In function `alsa_reader':
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:41: undefined reference to `av_read_frame'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:80: undefined reference to `av_free_packet'
/tmp/ccGCH40C.o: In function `probe_codec':
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:91: undefined reference to `av_init_packet'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:92: undefined reference to `av_read_frame'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:95: undefined reference to `av_free_packet'
/tmp/ccGCH40C.o: In function `open_output':
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:118: undefined reference to `ao_open_live'
/tmp/ccGCH40C.o: In function `test_audio_out':
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:151: undefined reference to `cos'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:160: undefined reference to `ao_play'
/tmp/ccGCH40C.o: In function `main':
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:209: undefined reference to `av_register_all'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:210: undefined reference to `avcodec_register_all'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:211: undefined reference to `avdevice_register_all'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:212: undefined reference to `ao_initialize'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:216: undefined reference to `ao_append_option'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:220: undefined reference to `ao_default_driver_id'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:222: undefined reference to `ao_driver_id'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:232: undefined reference to `av_find_input_format'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:236: undefined reference to `av_find_input_format'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:241: undefined reference to `av_malloc'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:253: undefined reference to `avformat_close_input'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:255: undefined reference to `avformat_close_input'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:257: undefined reference to `ao_close'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:265: undefined reference to `avformat_alloc_context'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:269: undefined reference to `avformat_open_input'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:275: undefined reference to `av_init_packet'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:277: undefined reference to `avio_alloc_context'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:281: undefined reference to `avformat_open_input'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:290: undefined reference to `avcodec_find_decoder'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:296: undefined reference to `avcodec_alloc_context3'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:300: undefined reference to `avcodec_open2'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:304: undefined reference to `av_init_packet'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:311: undefined reference to `av_free_packet'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:312: undefined reference to `av_read_frame'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:320: undefined reference to `avcodec_get_frame_defaults'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:322: undefined reference to `avcodec_decode_audio4'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:339: undefined reference to `av_get_bytes_per_sample'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:346: undefined reference to `av_samples_get_buffer_size'
/home/livewire/Projects/Software/spdif-loop/spdif-loop.c:370: undefined reference to `ao_play'
collect2: error: ld returned 1 exit status
make: *** [spdif-loop] Error 1

嘗試查找或解決問題的更多猜測方法:

livewire@za20:~/Projects/Software/spdif-loop$ grep av_read_frame /usr/include/libavformat/*
/usr/include/libavformat/avformat.h: * avformat_open_input() function for opening a file, av_read_frame() for
/usr/include/libavformat/avformat.h: * av_read_frame() on it. Each call, if successful, will return an AVPacket
/usr/include/libavformat/avformat.h: * until the next av_read_frame() call or closing the file. If the caller
/usr/include/libavformat/avformat.h:    /* av_read_frame() support */
/usr/include/libavformat/avformat.h:     * appear in av_read_frame().
/usr/include/libavformat/avformat.h: * Use av_read_frame() instead.
/usr/include/libavformat/avformat.h: * av_read_frame() or until av_close_input_file(). Otherwise the packet is valid
/usr/include/libavformat/avformat.h:int av_read_frame(AVFormatContext *s, AVPacket *pkt);

所以頭文件和該文件中的函數存在嗎?

我嘗試搜索,發現了一些類似的問題,其中包含Android項目的更復雜的make文件,我認為這是錯誤的方向。 我也在FAQ中找到了此注釋 ,但我認為這是C程序而不是C ++。 我只是看着向我提出的類似問題。

正如我所說,我幾乎沒有經驗,您能否告訴我我做錯了什么,我缺少什么或需要添加什么才能使其正常構建?

我也試過

LDFLAGS+=       -lavcodec -lavformat -lavdevice -lavutil -lao -lm -L/usr/include/libavformat

LDFLAGS+=       -lavcodec -lavformat -lavdevice -lavutil -lao -lm -L/usr/lib/x86_64-linux-gnu

在make文件中,沒有成功或沒有進展。

嘗試使用以下Makefile:

PROG=   spdif-loop

CFLAGS+=        -Wall -std=c99 -g
LDFLAGS+=       -lavcodec -lavformat -lavdevice -lavutil -lao -lm

all: ${PROG}

$(PROG): $(PROG).c
        cc $(CFLAGS) $(PROG).c $(LDFLAGS) -o $(PROG)
clean:
        -rm -f ${PROG}

在我的Ubuntu 14.xx上它可以編譯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM