Cmake on my project uses external projects. I want to recompile everything, but I want to pass -llikwid
flag too all linking commands, including all external project. I exported LDFLAGS="-llikwid"
, but it's not working. The LDFLAGS
gets added too early, and linking fails. If I add -llikwid
manually at the end of the linking command, then linking succeeds.
Here is how the linking line looks like when linking fails:
$ /usr/bin/c++ -DLIKWID_PERFMON -O2 -g -DNDEBUG -llikwid -Wl,-z,noexecstack -Wl,-z,relro,-z,now -pie -Wl,--exclude-libs,libz.a -Wl,--exclude-libs,libzmq.a -Wl,--exclude-libs,libvtkFiltersGeneral-9.1.a -Wl,--exclude-libs,libvtkFiltersCore-9.1.a -Wl,--exclude-libs,libvtkCommonExecutionModel-9.1.a -Wl,--exclude-libs,libvtkCommonDataModel-9.1.a -Wl,--exclude-libs,libvtkCommonTransforms-9.1.a -Wl,--exclude-libs,libvtkCommonMath-9.1.a -Wl,--exclude-libs,libvtkCommonMisc-9.1.a -Wl,--exclude-libs,libvtkCommonSystem-9.1.a -Wl,--exclude-libs,libvtkCommonCore-9.1.a -Wl,--exclude-libs,libvtkkissfft-9.1.a -Wl,--exclude-libs,libvtkpugixml-9.1.a -Wl,--exclude-libs,libvtksys-9.1.a -Wl,--exclude-libs,libmkl_merged.a -Wl,--exclude-libs,libtbb_static.a -Wl,--exclude-libs,libippiw.a -Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libembree3.a -Wl,--exclude-libs,libembree_avx.a -Wl,--exclude-libs,libembree_avx2.a -Wl,--exclude-libs,libsimd.a -Wl,--exclude-libs,liblexers.a -Wl,--exclude-libs,libsys.a -Wl,--exclude-libs,libmath.a -Wl,--exclude-libs,libtasking.a CMakeFiles/ManuallyCropGeometry.dir/ManuallyCropGeometry.cpp.o -o ../../bin/ManuallyCropGeometry ../../lib/RelWithDebInfo/libOpen3D.a -lstdc++fs ../../assimp/lib/libassimp.a ../../turbojpeg/lib/libturbojpeg.a ../../jsoncpp/lib/libjsoncpp.a ../../lib/RelWithDebInfo/libOpen3D_3rdparty_liblzf.a ../../curl/src/ext_curl/lib/libcurl.a ../../boringssl/src/ext_boringssl/lib/libssl.a ../../boringssl/src/ext_boringssl/lib/libcrypto.a ../../libpng/lib/libpng16.a ../../zlib/lib/libz.a ../../lib/RelWithDebInfo/libOpen3D_3rdparty_rply.a ../../lib/RelWithDebInfo/libOpen3D_3rdparty_tinyfiledialogs.a ../../lib/RelWithDebInfo/libOpen3D_3rdparty_qhullcpp.a ../../lib/RelWithDebInfo/libOpen3D_3rdparty_qhull_r.a ../../zeromq/lib/libzmq.a ../../vtk/src/ext_vtk/lib/libvtkFiltersGeneral-9.1.a ../../vtk/src/ext_vtk/lib/libvtkFiltersCore-9.1.a ../../vtk/src/ext_vtk/lib/libvtkCommonExecutionModel-9.1.a ../../vtk/src/ext_vtk/lib/libvtkCommonDataModel-9.1.a ../../vtk/src/ext_vtk/lib/libvtkCommonTransforms-9.1.a ../../vtk/src/ext_vtk/lib/libvtkCommonMath-9.1.a ../../vtk/src/ext_vtk/lib/libvtkCommonMisc-9.1.a ../../vtk/src/ext_vtk/lib/libvtkCommonSystem-9.1.a ../../vtk/src/ext_vtk/lib/libvtkCommonCore-9.1.a ../../vtk/src/ext_vtk/lib/libvtkkissfft-9.1.a ../../vtk/src/ext_vtk/lib/libvtkpugixml-9.1.a ../../vtk/src/ext_vtk/lib/libvtksys-9.1.a ../../mkl_install/lib/libtbbmalloc_static.a ../../mkl_install/lib/libmkl_merged.a ../../mkl_install/lib/libtbb_static.a ../../embree/lib/libembree3.a ../../embree/lib/libembree_avx.a ../../embree/lib/libembree_avx2.a ../../embree/lib/libsimd.a ../../embree/lib/liblexers.a ../../embree/lib/libsys.a ../../embree/lib/libmath.a ../../embree/lib/libtasking.a /usr/lib/gcc/x86_64-linux-gnu/11/libgomp.so /usr/lib/x86_64-linux-gnu/libpthread.a ../../ippicv/lib/libippiw.a ../../ippicv/lib/libippicv.a ../../lib/RelWithDebInfo/libOpen3D_3rdparty_glew.a -lstdc++fs ../../lib/RelWithDebInfo/libglfw3.a /usr/lib/x86_64-linux-gnu/librt.a -lm -ldl /usr/lib/x86_64-linux-gnu/libX11.so ../../fmt/lib/libfmt.a /usr/lib/x86_64-linux-gnu/libGL.so
/usr/bin/ld: ../../lib/RelWithDebInfo/libOpen3D.a(KDTreeFlann.cpp.o): in function `bool nanoflann::KDTreeSingleIndexAdaptor<nanoflann::L2_Adaptor<double, nanoflann::KDTreeEigenMatrixAdaptor<Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1> const, 0, Eigen::Stride<0, 0> >, -1, nanoflann::metric_L2, false>, double>, nanoflann::KDTreeEigenMatrixAdaptor<Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1> const, 0, Eigen::Stride<0, 0> >, -1, nanoflann::metric_L2, false>, -1, long>::findNeighbors<nanoflann::KNNResultSet<double, long, unsigned long> >(nanoflann::KNNResultSet<double, long, unsigned long>&, double const*, nanoflann::SearchParams const&) const':
/home/ivica/Projects/Open3D/build/nanoflann/src/ext_nanoflann/include/nanoflann.hpp:1239: undefined reference to `likwid_markerStartRegion'
/usr/bin/ld: /home/ivica/Projects/Open3D/build/nanoflann/src/ext_nanoflann/include/nanoflann.hpp:1243: undefined reference to `likwid_markerStopRegion'
/usr/bin/ld: ../../lib/RelWithDebInfo/libOpen3D.a(KDTreeFlann.cpp.o): in function `bool nanoflann::KDTreeSingleIndexAdaptor<nanoflann::L2_Adaptor<double, nanoflann::KDTreeEigenMatrixAdaptor<Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1> const, 0, Eigen::Stride<0, 0> >, -1, nanoflann::metric_L2, false>, double>, nanoflann::KDTreeEigenMatrixAdaptor<Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1> const, 0, Eigen::Stride<0, 0> >, -1, nanoflann::metric_L2, false>, -1, long>::findNeighbors<nanoflann::RadiusResultSet<double, long> >(nanoflann::RadiusResultSet<double, long>&, double const*, nanoflann::SearchParams const&) const':
/home/ivica/Projects/Open3D/build/nanoflann/src/ext_nanoflann/include/nanoflann.hpp:1239: undefined reference to `likwid_markerStartRegion'
/usr/bin/ld: /home/ivica/Projects/Open3D/build/nanoflann/src/ext_nanoflann/include/nanoflann.hpp:1243: undefined reference to `likwid_markerStopRegion'
/usr/bin/ld: /home/ivica/Projects/Open3D/build/nanoflann/src/ext_nanoflann/include/nanoflann.hpp:1239: undefined reference to `likwid_markerStartRegion'
/usr/bin/ld: /home/ivica/Projects/Open3D/build/nanoflann/src/ext_nanoflann/include/nanoflann.hpp:1243: undefined reference to `likwid_markerStopRegion'
Here is it when linking succeds (notice the position of -llikwid
).
$ /usr/bin/c++ -DLIKWID_PERFMON -O2 -g -DNDEBUG -Wl,-z,noexecstack -Wl,-z,relro,-z,now -pie -Wl,--exclude-libs,libz.a -Wl,--exclude-libs,libzmq.a -Wl,--exclude-libs,libvtkFiltersGeneral-9.1.a -Wl,--exclude-libs,libvtkFiltersCore-9.1.a -Wl,--exclude-libs,libvtkCommonExecutionModel-9.1.a -Wl,--exclude-libs,libvtkCommonDataModel-9.1.a -Wl,--exclude-libs,libvtkCommonTransforms-9.1.a -Wl,--exclude-libs,libvtkCommonMath-9.1.a -Wl,--exclude-libs,libvtkCommonMisc-9.1.a -Wl,--exclude-libs,libvtkCommonSystem-9.1.a -Wl,--exclude-libs,libvtkCommonCore-9.1.a -Wl,--exclude-libs,libvtkkissfft-9.1.a -Wl,--exclude-libs,libvtkpugixml-9.1.a -Wl,--exclude-libs,libvtksys-9.1.a -Wl,--exclude-libs,libmkl_merged.a -Wl,--exclude-libs,libtbb_static.a -Wl,--exclude-libs,libippiw.a -Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libembree3.a -Wl,--exclude-libs,libembree_avx.a -Wl,--exclude-libs,libembree_avx2.a -Wl,--exclude-libs,libsimd.a -Wl,--exclude-libs,liblexers.a -Wl,--exclude-libs,libsys.a -Wl,--exclude-libs,libmath.a -Wl,--exclude-libs,libtasking.a CMakeFiles/ManuallyCropGeometry.dir/ManuallyCropGeometry.cpp.o -o ../../bin/ManuallyCropGeometry ../../lib/RelWithDebInfo/libOpen3D.a -lstdc++fs ../../assimp/lib/libassimp.a ../../turbojpeg/lib/libturbojpeg.a ../../jsoncpp/lib/libjsoncpp.a ../../lib/RelWithDebInfo/libOpen3D_3rdparty_liblzf.a ../../curl/src/ext_curl/lib/libcurl.a ../../boringssl/src/ext_boringssl/lib/libssl.a ../../boringssl/src/ext_boringssl/lib/libcrypto.a ../../libpng/lib/libpng16.a ../../zlib/lib/libz.a ../../lib/RelWithDebInfo/libOpen3D_3rdparty_rply.a ../../lib/RelWithDebInfo/libOpen3D_3rdparty_tinyfiledialogs.a ../../lib/RelWithDebInfo/libOpen3D_3rdparty_qhullcpp.a ../../lib/RelWithDebInfo/libOpen3D_3rdparty_qhull_r.a ../../zeromq/lib/libzmq.a ../../vtk/src/ext_vtk/lib/libvtkFiltersGeneral-9.1.a ../../vtk/src/ext_vtk/lib/libvtkFiltersCore-9.1.a ../../vtk/src/ext_vtk/lib/libvtkCommonExecutionModel-9.1.a ../../vtk/src/ext_vtk/lib/libvtkCommonDataModel-9.1.a ../../vtk/src/ext_vtk/lib/libvtkCommonTransforms-9.1.a ../../vtk/src/ext_vtk/lib/libvtkCommonMath-9.1.a ../../vtk/src/ext_vtk/lib/libvtkCommonMisc-9.1.a ../../vtk/src/ext_vtk/lib/libvtkCommonSystem-9.1.a ../../vtk/src/ext_vtk/lib/libvtkCommonCore-9.1.a ../../vtk/src/ext_vtk/lib/libvtkkissfft-9.1.a ../../vtk/src/ext_vtk/lib/libvtkpugixml-9.1.a ../../vtk/src/ext_vtk/lib/libvtksys-9.1.a ../../mkl_install/lib/libtbbmalloc_static.a ../../mkl_install/lib/libmkl_merged.a ../../mkl_install/lib/libtbb_static.a ../../embree/lib/libembree3.a ../../embree/lib/libembree_avx.a ../../embree/lib/libembree_avx2.a ../../embree/lib/libsimd.a ../../embree/lib/liblexers.a ../../embree/lib/libsys.a ../../embree/lib/libmath.a ../../embree/lib/libtasking.a /usr/lib/gcc/x86_64-linux-gnu/11/libgomp.so /usr/lib/x86_64-linux-gnu/libpthread.a ../../ippicv/lib/libippiw.a ../../ippicv/lib/libippicv.a ../../lib/RelWithDebInfo/libOpen3D_3rdparty_glew.a -lstdc++fs ../../lib/RelWithDebInfo/libglfw3.a /usr/lib/x86_64-linux-gnu/librt.a -lm -ldl /usr/lib/x86_64-linux-gnu/libX11.so ../../fmt/lib/libfmt.a /usr/lib/x86_64-linux-gnu/libGL.so -llikwid
How can I fix this?