cant link different bit library versions
Issue #621
new
mkdir -p 8bit 10bit 12bit &&
cd 12bit &&
cmake -GNinja -DCMAKE_INSTALL_PREFIX=/usr/local \
-DENABLE_SHARED=OFF -DHIGH_BIT_DEPTH=ON \
-DMAIN12=ON -DENABLE_LIBNUMA=ON -DNATIVE_BUILD=ON \
-DENABLE_CLI=OFF \
-DCMAKE_BUILD_TYPE=Release \
-DEXPORT_C_API=OFF ../../x265_git/source/ &&
ninja &&
cd ../10bit &&
cmake -GNinja -DCMAKE_INSTALL_PREFIX=/usr/local \
-DENABLE_SHARED=OFF -DHIGH_BIT_DEPTH=ON \
-DENABLE_LIBNUMA=ON -DNATIVE_BUILD=ON \
-DENABLE_CLI=OFF \
-DCMAKE_BUILD_TYPE=Release \
-DEXPORT_C_API=OFF ../../x265_git/source/ &&
ninja &&
cd ../8bit &&
ln -sf ../10bit/libx265.a libx265_main10.a &&
ln -sf ../12bit/libx265.a libx265_main12.a &&
cmake -GNinja -DCMAKE_INSTALL_PREFIX=/usr/local \
-DENABLE_SHARED=ON -DNATIVE_BUILD=ON \
-DEXTRA_LIB="vmaf;x265_main10;x265_main12" \
-DEXTRA_LINK_FLAGS=' -L. -L/usr/local/lib64 ' \
-DLINKED_10BIT=ON -DLINKED_12BIT=ON \
-DENABLE_LIBNUMA=ON -DCMAKE_BUILD_TYPE=Release \
-DENABLE_HDR10_PLUS=YES -DENABLE_LIBVMAF=ON \
../../x265_git/source/
FAILED: libx265.so.206
: && /usr/bin/g++ -fPIC -O3 -feliminate-unused-debug-types -pipe -Wp,-D_FORTIFY_SOURCE=2 -fasynchronous-unwind-tables -Wp,-D_REENTRANT -ftree-loop-distribute-patterns -Wl,-z -Wl,now -Wl,-z -Wl,relro -fno-semantic-interposition -ffat-lto-objects -fno-trapping-math -Wl,-sort-common -Wl,--enable-new-dtags -mtune=native -mrelax-cmpxchg-loop -march=native -fvisibility-inlines-hidden -Wl,--enable-new-dtags -O3 -DNDEBUG -L. -L/usr/local/lib64 -Wl,-Bsymbolic,-znoexecstack -shared -Wl,-soname,libx265.so.206 -o libx265.so.206 encoder/CMakeFiles/encoder.dir/analysis.cpp.o encoder/CMakeFiles/encoder.dir/search.cpp.o encoder/CMakeFiles/encoder.dir/bitcost.cpp.o encoder/CMakeFiles/encoder.dir/motion.cpp.o encoder/CMakeFiles/encoder.dir/slicetype.cpp.o encoder/CMakeFiles/encoder.dir/frameencoder.cpp.o encoder/CMakeFiles/encoder.dir/framefilter.cpp.o encoder/CMakeFiles/encoder.dir/level.cpp.o encoder/CMakeFiles/encoder.dir/nal.cpp.o encoder/CMakeFiles/encoder.dir/sei.cpp.o encoder/CMakeFiles/encoder.dir/sao.cpp.o encoder/CMakeFiles/encoder.dir/entropy.cpp.o encoder/CMakeFiles/encoder.dir/dpb.cpp.o encoder/CMakeFiles/encoder.dir/ratecontrol.cpp.o encoder/CMakeFiles/encoder.dir/reference.cpp.o encoder/CMakeFiles/encoder.dir/encoder.cpp.o encoder/CMakeFiles/encoder.dir/api.cpp.o encoder/CMakeFiles/encoder.dir/weightPrediction.cpp.o common/CMakeFiles/common.dir/x86/pixel-a.asm.o common/CMakeFiles/common.dir/x86/const-a.asm.o common/CMakeFiles/common.dir/x86/cpu-a.asm.o common/CMakeFiles/common.dir/x86/ssd-a.asm.o common/CMakeFiles/common.dir/x86/mc-a.asm.o common/CMakeFiles/common.dir/x86/mc-a2.asm.o common/CMakeFiles/common.dir/x86/pixel-util8.asm.o common/CMakeFiles/common.dir/x86/blockcopy8.asm.o common/CMakeFiles/common.dir/x86/pixeladd8.asm.o common/CMakeFiles/common.dir/x86/dct8.asm.o common/CMakeFiles/common.dir/x86/seaintegral.asm.o common/CMakeFiles/common.dir/x86/sad-a.asm.o common/CMakeFiles/common.dir/x86/intrapred8.asm.o common/CMakeFiles/common.dir/x86/intrapred8_allangs.asm.o common/CMakeFiles/common.dir/x86/v4-ipfilter8.asm.o common/CMakeFiles/common.dir/x86/h-ipfilter8.asm.o common/CMakeFiles/common.dir/x86/ipfilter8.asm.o common/CMakeFiles/common.dir/x86/loopfilter.asm.o common/CMakeFiles/common.dir/x86/asm-primitives.cpp.o common/CMakeFiles/common.dir/vec/vec-primitives.cpp.o common/CMakeFiles/common.dir/vec/dct-sse3.cpp.o common/CMakeFiles/common.dir/vec/dct-ssse3.cpp.o common/CMakeFiles/common.dir/vec/dct-sse41.cpp.o common/CMakeFiles/common.dir/primitives.cpp.o common/CMakeFiles/common.dir/pixel.cpp.o common/CMakeFiles/common.dir/dct.cpp.o common/CMakeFiles/common.dir/lowpassdct.cpp.o common/CMakeFiles/common.dir/ipfilter.cpp.o common/CMakeFiles/common.dir/intrapred.cpp.o common/CMakeFiles/common.dir/loopfilter.cpp.o common/CMakeFiles/common.dir/constants.cpp.o common/CMakeFiles/common.dir/cpu.cpp.o common/CMakeFiles/common.dir/version.cpp.o common/CMakeFiles/common.dir/threading.cpp.o common/CMakeFiles/common.dir/threadpool.cpp.o common/CMakeFiles/common.dir/wavefront.cpp.o common/CMakeFiles/common.dir/md5.cpp.o common/CMakeFiles/common.dir/bitstream.cpp.o common/CMakeFiles/common.dir/yuv.cpp.o common/CMakeFiles/common.dir/shortyuv.cpp.o common/CMakeFiles/common.dir/picyuv.cpp.o common/CMakeFiles/common.dir/common.cpp.o common/CMakeFiles/common.dir/param.cpp.o common/CMakeFiles/common.dir/frame.cpp.o common/CMakeFiles/common.dir/framedata.cpp.o common/CMakeFiles/common.dir/cudata.cpp.o common/CMakeFiles/common.dir/slice.cpp.o common/CMakeFiles/common.dir/lowres.cpp.o common/CMakeFiles/common.dir/piclist.cpp.o common/CMakeFiles/common.dir/predict.cpp.o common/CMakeFiles/common.dir/scalinglist.cpp.o common/CMakeFiles/common.dir/quant.cpp.o common/CMakeFiles/common.dir/deblock.cpp.o common/CMakeFiles/common.dir/scaler.cpp.o common/CMakeFiles/common.dir/ringmem.cpp.o common/CMakeFiles/common.dir/temporalfilter.cpp.o dynamicHDR10/CMakeFiles/dynamicHDR10.dir/json11/json11.cpp.o dynamicHDR10/CMakeFiles/dynamicHDR10.dir/JsonHelper.cpp.o dynamicHDR10/CMakeFiles/dynamicHDR10.dir/metadataFromJson.cpp.o dynamicHDR10/CMakeFiles/dynamicHDR10.dir/SeiMetadataDictionary.cpp.o dynamicHDR10/CMakeFiles/dynamicHDR10.dir/api.cpp.o -lvmaf -lx265_main10 -lx265_main12 -lpthread -lrt -ldl -lnuma && :
/usr/bin/ld: ./libx265_main10.a(temporalfilter.cpp.o): in function `OrigPicBuffer::~OrigPicBuffer()':
temporalfilter.cpp:(.text+0x140): multiple definition of `OrigPicBuffer::~OrigPicBuffer()'; common/CMakeFiles/common.dir/temporalfilter.cpp.o:temporalfilter.cpp:(.text+0x140): first defined here
/usr/bin/ld: ./libx265_main10.a(temporalfilter.cpp.o): in function `OrigPicBuffer::~OrigPicBuffer()':
temporalfilter.cpp:(.text+0x140): multiple definition of `OrigPicBuffer::~OrigPicBuffer()'; common/CMakeFiles/common.dir/temporalfilter.cpp.o:temporalfilter.cpp:(.text+0x140): first defined here
/usr/bin/ld: ./libx265_main10.a(temporalfilter.cpp.o): in function `OrigPicBuffer::recycleOrigPicList()':
temporalfilter.cpp:(.text+0x310): multiple definition of `OrigPicBuffer::recycleOrigPicList()'; common/CMakeFiles/common.dir/temporalfilter.cpp.o:temporalfilter.cpp:(.text+0x310): first defined here
/usr/bin/ld: ./libx265_main10.a(temporalfilter.cpp.o): in function `TemporalFilter::TemporalFilter()':
temporalfilter.cpp:(.text+0x3b0): multiple definition of `TemporalFilter::TemporalFilter()'; common/CMakeFiles/common.dir/temporalfilter.cpp.o:temporalfilter.cpp:(.text+0x3b0): first defined here
/usr/bin/ld: ./libx265_main10.a(temporalfilter.cpp.o): in function `TemporalFilter::TemporalFilter()':
temporalfilter.cpp:(.text+0x3b0): multiple definition of `TemporalFilter::TemporalFilter()'; common/CMakeFiles/common.dir/temporalfilter.cpp.o:temporalfilter.cpp:(.text+0x3b0): first defined here
/usr/bin/ld: ./libx265_main10.a(temporalfilter.cpp.o): in function `TemporalFilter::init(x265_param const*)':
temporalfilter.cpp:(.text+0x420): multiple definition of `TemporalFilter::init(x265_param const*)'; common/CMakeFiles/common.dir/temporalfilter.cpp.o:temporalfilter.cpp:(.text+0x420): first defined here
/usr/bin/ld: ./libx265_main10.a(temporalfilter.cpp.o): in function `TemporalFilter::createRefPicInfo(TemporalFilterRefPicInfo*, x265_param*)':
temporalfilter.cpp:(.text+0x4a0): multiple definition of `TemporalFilter::createRefPicInfo(TemporalFilterRefPicInfo*, x265_param*)'; common/CMakeFiles/common.dir/temporalfilter.cpp.o:temporalfilter.cpp:(.text+0x4a0): first defined here
/usr/bin/ld: ./libx265_main10.a(temporalfilter.cpp.o): in function `TemporalFilter::destroyRefPicInfo(TemporalFilterRefPicInfo*)':
temporalfilter.cpp:(.text+0x79b0): multiple definition of `TemporalFilter::destroyRefPicInfo(TemporalFilterRefPicInfo*)'; common/CMakeFiles/common.dir/temporalfilter.cpp.o:temporalfilter.cpp:(.text+0x6540): first defined here
/usr/bin/ld: ./libx265_main12.a(temporalfilter.cpp.o): in function `OrigPicBuffer::~OrigPicBuffer()':
temporalfilter.cpp:(.text+0x140): multiple definition of `OrigPicBuffer::~OrigPicBuffer()'; common/CMakeFiles/common.dir/temporalfilter.cpp.o:temporalfilter.cpp:(.text+0x140): first defined here
/usr/bin/ld: ./libx265_main12.a(temporalfilter.cpp.o): in function `OrigPicBuffer::~OrigPicBuffer()':
temporalfilter.cpp:(.text+0x140): multiple definition of `OrigPicBuffer::~OrigPicBuffer()'; common/CMakeFiles/common.dir/temporalfilter.cpp.o:temporalfilter.cpp:(.text+0x140): first defined here
/usr/bin/ld: ./libx265_main12.a(temporalfilter.cpp.o): in function `OrigPicBuffer::recycleOrigPicList()':
temporalfilter.cpp:(.text+0x310): multiple definition of `OrigPicBuffer::recycleOrigPicList()'; common/CMakeFiles/common.dir/temporalfilter.cpp.o:temporalfilter.cpp:(.text+0x310): first defined here
/usr/bin/ld: ./libx265_main12.a(temporalfilter.cpp.o): in function `TemporalFilter::TemporalFilter()':
temporalfilter.cpp:(.text+0x3b0): multiple definition of `TemporalFilter::TemporalFilter()'; common/CMakeFiles/common.dir/temporalfilter.cpp.o:temporalfilter.cpp:(.text+0x3b0): first defined here
/usr/bin/ld: ./libx265_main12.a(temporalfilter.cpp.o): in function `TemporalFilter::TemporalFilter()':
temporalfilter.cpp:(.text+0x3b0): multiple definition of `TemporalFilter::TemporalFilter()'; common/CMakeFiles/common.dir/temporalfilter.cpp.o:temporalfilter.cpp:(.text+0x3b0): first defined here
/usr/bin/ld: ./libx265_main12.a(temporalfilter.cpp.o): in function `TemporalFilter::init(x265_param const*)':
temporalfilter.cpp:(.text+0x420): multiple definition of `TemporalFilter::init(x265_param const*)'; common/CMakeFiles/common.dir/temporalfilter.cpp.o:temporalfilter.cpp:(.text+0x420): first defined here
/usr/bin/ld: ./libx265_main12.a(temporalfilter.cpp.o): in function `TemporalFilter::createRefPicInfo(TemporalFilterRefPicInfo*, x265_param*)':
temporalfilter.cpp:(.text+0x4a0): multiple definition of `TemporalFilter::createRefPicInfo(TemporalFilterRefPicInfo*, x265_param*)'; common/CMakeFiles/common.dir/temporalfilter.cpp.o:temporalfilter.cpp:(.text+0x4a0): first defined here
/usr/bin/ld: ./libx265_main12.a(temporalfilter.cpp.o): in function `TemporalFilter::destroyRefPicInfo(TemporalFilterRefPicInfo*)':
temporalfilter.cpp:(.text+0x79b0): multiple definition of `TemporalFilter::destroyRefPicInfo(TemporalFilterRefPicInfo*)'; common/CMakeFiles/common.dir/temporalfilter.cpp.o:temporalfilter.cpp:(.text+0x6540): first defined here
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
Comments (2)
-
-
This is an issue in how the new temporalfilter header tries to use the private namespace:
Just putting “using” into a header obviously does not work, since all the functions will not automatically be put into the namespace.
The header needs to use the namespace like every other header does, for example: - Log in to comment
I have noticed somethig similar. Building a static lib works, but as soon as you try to link that static lib to another binary, you get duplicate symbols errors.
Edit: Someone opened an issue for the problem I actually have: https://bitbucket.org/multicoreware/x265_git/issues/622