我正在尝试运行LibSourcey来使用。
问题是,我似乎无法使它发挥作用。我挣扎着在我的Ubuntu16.04( cmake文件中的Regexp)上创建这个项目,但现在它已经修复了。我实际遇到的问题是编译时出现了一个共享对象错误:
usr/bin/ld: /home/kimmie/ffmpeg_build/lib/libswresample.a(options.o):
relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object;
recompile with -fPIC
/home/kimmie/ffmpeg_build/lib/libswresample.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
av/CMakeFiles/av.dir/build.make:783: recipe for target 'av/libscy_av.so.1.0.2' failed任何帮助都是非常感谢的,因为我现在不知道该做什么。
发布于 2017-08-09 05:00:35
我在Ubuntu 16.04上也碰到了同样的错误。
最后,我用标志重新编译FFmpeg以构建共享库。在FFmpeg编译指南中的代码示例框之后,在适用的情况下,我将以下两个标志添加到./配置行中:
我还删除了--disable-shared标志。
我在每个组件中都添加了--enable-pic和--enable-shared,如果它返回了一个该组件无法识别的消息,则删除该标志。至少libx264、libfdk和libmp3lame需要启用共享。然后是最终的FFmpeg (复制并粘贴在FFmpeg指南中,链接到上面):
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
--prefix="$HOME/ffmpeg_build" \
--pkg-config-flags="--static" \
--extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libtheora \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree \
--enable-pic \
--enable-shared注意,我的示例中的最后两行与FFmpeg指南不同。
在完成所有这些操作之后,最好删除Libsourcey源代码并构建文件夹,然后重新开始。
我花了大约4-5天的时间才最终编译并成功地构建了带有FFmpeg和WebRTC依赖关系的Libsourcey。我也遇到了其他障碍,所以如果你有其他问题,一定要给我贴上标签。注意:我是的新手,并不是所有的概念都很扎实;这正是对我起作用的地方,也许它会对您有用。
发布于 2017-07-18 18:51:34
您有链接错误,而不是编译错误。您没有遇到错误,您只是尝试了一个无法工作的链接。
您正在尝试构建一个共享库libscy_av.so。共享库中链接的所有对象文件必须由位置独立码组成。要使用gcc生成这样的对象文件,可以使用选项-fPIC进行编译。
链接器发现您的共享libary需要对象文件options.o,它是静态库libswresample.a的一个成员。然后,它发现这个options.o不是PIC,因此不能在共享库中链接。链接失败,链接器建议必须使用options.o编译器选项重新编译-fPIC。
为了遵从这个建议,您必须从源代码重新构建静态库libswresample.a,并将-fPIC添加到编译器标志中。
您可能会这样做,但是静态库中的对象文件不太可能是PIC,还有一个更简单的选择。您的错误是链接到静态版本的libswresample (libswresample.a),而不是共享版本(libswresample.so),后者将是PIC。纠正那个错误。如果您从包管理器提供的dev包安装libswresample.a,那么它也将提供libswresample.so。如果您已经从源代码构建了libswresample,那么构建系统也会同时构建两者。
https://stackoverflow.com/questions/45145419
复制相似问题