当前位置: 首页 > 知识库问答 >
问题:

必须包括所有“file.o”文件,其中有“#include”file.h“。

洪彬
2023-03-14
/path/to/cross/compiler/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/bin/ld: warning: libavutil.so.51, needed by /mnt/root/usr/lib/arm-linux-gnueabihf/libpostproc.so.52, may conflict with libavutil.so.52
BitstreamConverter.o: In function `DllAvUtilBase::av_frame_move_ref(AVFrame*, AVFrame*)':
BitstreamConverter.cpp:(.text._ZN13DllAvUtilBase17av_frame_move_refEP7AVFrameS1_[_ZN13DllAvUtilBase17av_frame_move_refEP7AVFrameS1_]+0x8): undefined reference to `av_frame_move_ref'
BitstreamConverter.o: In function `DllAvUtilBase::av_frame_unref(AVFrame*)':
BitstreamConverter.cpp:(.text._ZN13DllAvUtilBase14av_frame_unrefEP7AVFrame[_ZN13DllAvUtilBase14av_frame_unrefEP7AVFrame]+0x4): undefined reference to `av_frame_unref'
BitstreamConverter.o: In function `DllAvUtilBase::av_frame_alloc()':
BitstreamConverter.cpp:(.text._ZN13DllAvUtilBase14av_frame_allocEv[_ZN13DllAvUtilBase14av_frame_allocEv]+0x0): undefined reference to `av_frame_alloc'
BitstreamConverter.o: In function `DllAvUtilBase::av_frame_free(AVFrame**)':
BitstreamConverter.cpp:(.text._ZN13DllAvUtilBase13av_frame_freeEPP7AVFrame[_ZN13DllAvUtilBase13av_frame_freeEPP7AVFrame]+0x4): undefined reference to `av_frame_free'
collect2: error: ld returned 1 exit status
make: *** [omxplayer.bin] Error 1

Makefile:

SRC=linux/XMemUtils.cpp \
        utils/log.cpp \
        DynamicDll.cpp \
        utils/PCMRemap.cpp \
        utils/RegExp.cpp \
        OMXSubtitleTagSami.cpp \
        OMXOverlayCodecText.cpp \
        BitstreamConverter.cpp \
        linux/RBP.cpp \
        OMXThread.cpp \
        OMXReader.cpp \
        OMXStreamInfo.cpp \
        OMXAudioCodecOMX.cpp \
        OMXCore.cpp \
        OMXVideo.cpp \
        OMXAudio.cpp \
        OMXClock.cpp \
        File.cpp \
        OMXPlayerVideo.cpp \
        OMXPlayerAudio.cpp \
        OMXPlayerSubtitles.cpp \
        SubtitleRenderer.cpp \
        Unicode.cpp \
        Srt.cpp \
        KeyConfig.cpp \
        OMXControl.cpp \
        Keyboard.cpp \
        omxplayer.cpp \

OBJS+=$(filter %.o,$(SRC:.cpp=.o))

all: omxplayer.bin

%.o: %.cpp
    @rm -f $@ 
    $(CXX) $(CFLAGS) $(INCLUDES) -c $< -o $@ -Wno-deprecated-declarations

version:
    bash gen_version.sh > version.h 

omxplayer.bin: version $(OBJS)
    $(CXX) $(LDFLAGS) -o omxplayer.bin $(OBJS) -lvchiq_arm -lvcos -lrt -lpthread -lavutil -lavcodec -lavformat -lavdevice -lavfilter -lswscale -lswresample -lpcre `./arm-linux-gnueabihf-pkg-config --libs dbus-1` -lrt
    #arm-unknown-linux-gnueabi-strip omxplayer.bin

clean:
    for i in $(OBJS); do (if test -e "$$i"; then ( rm $$i ); fi ); done
    @rm -f omxplayer.old.log omxplayer.log
    @rm -f omxplayer.bin
    @rm -rf $(DIST)
    @rm -f omxplayer-dist.tar.gz

ffmpeg:
    @rm -rf ffmpeg
    make -f Makefile.ffmpeg
    make -f Makefile.ffmpeg install

dist: omxplayer.bin
    mkdir -p $(DIST)/usr/lib/omxplayer
    mkdir -p $(DIST)/usr/bin
    mkdir -p $(DIST)/usr/share/doc
    cp omxplayer omxplayer.bin $(DIST)/usr/bin
    cp COPYING $(DIST)/usr/share/doc/
    cp README.md $(DIST)/usr/share/doc/README
    cp -a ffmpeg_compiled/usr/local/lib/*.so* $(DIST)/usr/lib/omxplayer/
    tar -czf omxplayer-dist.tar.gz $(DIST)

共有1个答案

长孙燕七
2023-03-14

看起来需要在编译时从.o文件中拉入函数定义。我发现这篇文章非常有助于解释这背后的理论:

http://eli.theGreenplace.net/2013/07/09/Library-Order-in-Static-Linking/

关于链接和编译的更多信息,我也强烈推荐这本书:http://www.network-theory.co.uk/docs/gccintro/index.html

 类似资料:
  • 即将用Maven TestNG Selenium实现一个测试框架。 如何声明告诉TestNG运行所有测试的suite.xml?我尝试了所有这些都无济于事: 我需要用不同的参数指定不同的套件配置,但都运行所有测试。我能找到的每一个例子都清楚地列出了对我来说意义不到零的每个类或包。

  • 问题内容: 我的head标签中未包含以下代码行,但是我的收藏夹图标仍显示在浏览器中: 包含它的目的是什么? 问题答案: 如果您不调用favicon,则可以使用该标记来指定实际路径(如果您将其放在目录中)。默认情况下,浏览器/网页在根目录中查找。

  • 有人知道如何编写正则表达式模式吗? 假设我有一组字母,比如 还有一个单词Alabama,我希望preg_match返回true,因为它包含两次字母a和B。但是单词Ab应该返回false,因为这个单词中没有两个a。 有什么想法吗? 编辑:我尝试的唯一模式是[a,b,a],但它会在每个包含其中一个字母的单词上返回true,并且不会检查是否出现多个字母

  • 我真正需要的是Eclipse与Netbeans的等价物: 我想,这样我就可以分发它,而无需将lib文件夹包含到任何地方。 这是最初的问题。 我试图建立一个罐子出来的网豆,将包装所有的库文件在里面。我听说选择导出可以使用Eclipse。使用Netbean,如果我“清理并构建”,它将在dist文件夹中创建一个可执行的jar,但是它所依赖的所有库都在一个名为lib的文件夹中。我需要它都在一个jar文件中

  • 问题内容: 假设我有一个目录中,其中有3个符号连接其他目录 ,和。我想列出中的所有文件,包括在那些,和。 为了更通用,我想列出所有文件,包括目录中的符号链接文件。,等停止在符号链接上,而无需导航到它们以进一步列出。 问题答案: 该选项将完成您想要的。它取消引用符号链接。 因此,您的命令将是: 您也可以使用 该选项指示find跟随符号链接到目录。 在Mac OS X上使用 如已弃用。

  • 本文向大家介绍Dubbo必须依赖的包有哪些?相关面试题,主要包含被问及Dubbo必须依赖的包有哪些?时的应答技巧和注意事项,需要的朋友参考一下 Dubbo 必须依赖 JDK,其他为可选。