cant link different bit library versions

Issue #621 new
Former user created an issue
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)

  1. BtbN

    This is an issue in how the new temporalfilter header tries to use the private namespace:

    https://bitbucket.org/multicoreware/x265_git/src/8584bc7bd99262b8bd926476c866840fe0d9428a/source/common/temporalfilter.h#lines-36

    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:

    https://bitbucket.org/multicoreware/x265_git/src/8584bc7bd99262b8bd926476c866840fe0d9428a/source/common/threadpool.h#lines-30

  2. Log in to comment