Libav链接错误:未定义的引用 [英] Libav linking error: undefined references
本文介绍了Libav链接错误:未定义的引用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是我的问题:
- 我从源码(版本1.2)构建了ffmpeg,libav *库位于/ usr / local / lib,它们是静态的
- 我正在编译一个ns3(www.nsnam.org)模块,所以我对链接器的唯一控制是通过env变量LINKFLAGS
- 在源文件中,头文件是一个extern C块,所以它不是通常的g ++名称变化。
- 我设置LINKFLAGS = - 我/ usr / local / include / libavformat -I / usr / local / include / libavcodec -I / usr / local / include / libavutil -L / usr / local / lib -lavformat -lavcodec -lavutil,链接器似乎找不到任何的libav *函数(我得到很多未定义的引用,然后collect2:error:ld returned status 1
- I built ffmpeg from source (version 1.2), the libav* libraries are in /usr/local/lib and they're static
- I'm compiling a ns3 (www.nsnam.org) module, so my only control over the linker is through the env variable LINKFLAGS
- In the source the headers are in a "extern C" block, so it's not the usual g++ name mangling
- I set LINKFLAGS="-I/usr/local/include/libavformat -I/usr/local/include/libavcodec -I/usr/local/include/libavutil -L/usr/local/lib -lavformat -lavcodec -lavutil", and the linker can't seem to find any of the libav* functions I call (I get a lot of "undefined reference" and then "collect2: error: ld returned status 1"
任何人都可以帮我吗?谢谢...
Can anyone help me? Thanks...
编辑:这里有一些未定义的参考信息:
edit: here are a few of the undefined reference messages:
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `av_guess_format'
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `av_read_frame'
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `avformat_write_header'
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `av_interleaved_write_frame'
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `av_find_stream_info'
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `av_register_all'
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `av_init_packet'
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `avformat_alloc_context'
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `av_dump_format'
./libns3.14.1-qoe-monitor-debug.so: undefined reference to `avio_close'
edit2:这里是build failed :
edit2: here is the message I get after "build failed":
-> task in 'scratch-simulator' failed (exit status 1):
{task 53952272: cxxprogram scratch-simulator.cc.1.o -> scratch-simulator}
['/usr/bin/g++', '-I/usr/local/include/libavcodec', '-I/usr/local/include/libavformat/',
'-I/usr/local/include/libavutil/', '-L/usr/local/lib', '-I/usr/local
/include/libavcodec', '-I/usr/local/include/libavformat/', '-I/usr/local/include
/libavutil/', '-L/usr/local/lib', '-pthread', '-pthread', '-Wl,-z,relro',
'scratch/scratch-simulator.cc.1.o', '-o', '/home/fede/Thesis/ns-allinone-3.14.1
/ns-3.14.1/build/scratch/scratch-simulator', '-Wl,-Bstatic', '-Wl,-Bdynamic',
'-Wl,--no-as-needed', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.',
'-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.',
'-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.',
'-L.', '-L.', '-L.', '-L.', '-L.', '-L/usr/lib', '-lns3.14.1-test-debug', '-lns3.14.1-
csma-layout-debug', '-lns3.14.1-point-to-point-layout-debug', '-lns3.14.1-netanim-
debug', '-lns3.14.1-lte-debug', '-lns3.14.1-spectrum-debug', '-lns3.14.1-antenna-
debug', '-lns3.14.1-aodv-debug', '-lns3.14.1-dsdv-debug', '-lns3.14.1-dsr-debug',
'-lns3.14.1-mesh-debug', '-lns3.14.1-olsr-debug', '-lns3.14.1-csma-debug', '-lns3.14.1-
wimax-debug', '-lns3.14.1-applications-debug', '-lns3.14.1-virtual-net-device-debug',
'-lns3.14.1-uan-debug', '-lns3.14.1-energy-debug', '-lns3.14.1-flow-monitor-debug',
'-lns3.14.1-nix-vector-routing-debug', '-lns3.14.1-tap-bridge-debug', '-lns3.14.1-
visualizer-debug', '-lns3.14.1-internet-debug', '-lns3.14.1-bridge-debug', '-lns3.14.1-
point-to-point-debug', '-lns3.14.1-mpi-debug', '-lns3.14.1-wifi-debug', '-lns3.14.1-
buildings-debug', '-lns3.14.1-propagation-debug', '-lns3.14.1-mobility-debug',
'-lns3.14.1-config-store-debug', '-lns3.14.1-tools-debug', '-lns3.14.1-stats-debug',
'-lns3.14.1-emu-debug', '-lns3.14.1-topology-read-debug', '-lns3.14.1-network-debug',
'-lns3.14.1-qoe-monitor-debug', '-lns3.14.1-core-debug', '-lrt', '-lgsl',
'-lgslcblas', '-lm', '-ldl', '-lgtk-x11-2.0', '-lgdk-x11-2.0', '-latk-1.0',
'-lgio-2.0', '-lpangoft2-1.0', '-lpangocairo-1.0', '-lgdk_pixbuf-2.0', '-lcairo',
'-lpango-1.0', '-lfreetype', '-lfontconfig', '-lgobject-2.0', '-lglib-2.0', '-lxml2',
'-lpython2.7']
推荐答案
库是C.库头不包含externC编译为C + +。在您的C ++源代码中执行此操作:
The libraries are C. The library headers don't include an extern "C" when compiled as C++. Do this in your C++ source:
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
}
或者更一般地说,对于混合C和C ++源代码:
Or, more generically, for mixed C and C++ source:
#ifdef __cplusplus
extern "C" {
#endif
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#ifdef __cplusplus
}
#endif
你应该不错。
这篇关于Libav链接错误:未定义的引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文