[CMake] LD_LIBRARY_PATH not used by the linker
Ruben Di Battista
rubendibattista at gmail.com
Thu Aug 2 15:03:43 EDT 2018
Hello,
I'm running cmake on a system where I have module-loaded software such that
`LD_LIBRARY_PATH` gets populated by the module (actually I'm using Lmod)
function.
In my project, I have a dependency on VTK, and VTK could be compiled with
Python wrapping.
This is what I have in my main CMakeFiles.txt
project(HG)
set(HG_VERSION MAJOR 0)
set(HG_VERSION MINOR 1)
# We use VTK extensively
find_package(VTK REQUIRED)
include(${VTK_USE_FILE})
add_subdirectory(src)
# :: Tests ::
set(BUILD_TESTS FALSE CACHE BOOL "Set this to TRUE if you want to build and
\
run the tests ")
if(BUILD_TESTS)
# We use catch2 for tests
find_package(Catch2 QUIET
HINTS
"${CMAKE_BINARY_DIR}/third_party"
)
if(NOT Catch2_FOUND)
message(WARNING "Catch2 was not found in the system. \
It will be downloaded from its git repository and installed")
# Bootstrap Catch2
include(DownloadCatch2)
# Try again
find_package(Catch2 REQUIRED)
endif(NOT Catch2_FOUND)
enable_testing()
add_subdirectory(tests)
endif(BUILD_TESTS)
In the `tests` directory I have:
set(TEST_TARGET "test_${PROJECT_NAME}")
# find_package(PythonInterp REQUIRED)
# find_package(PythonLibs REQUIRED)
# message(FATAL_ERROR ${PYTHON_LIBRARIES})
# Generate test executable
add_executable(${TEST_TARGET}
test_hg.cxx
test_polydata_wrapper.cxx)
target_link_libraries(${TEST_TARGET} ${PROJECT_NAME} Catch2::Catch2
${VTK_LIBRARIES})
Now, when I compile the project, when linking the tests target:
cmake -DBUILD_TESTS:BOOL=ON ..
[100%] Linking CXX executable test_HG
PATH_TO_VTK_LIB_DIR/vtkWrappingPython27Core-7.1.so.1: error: undefined
reference to '_PyUnicodeUCS2_AsDefaultEncodedString'
PATH_TO_VTK_LIB_DIR/vtkWrappingPython27Core-7.1.so.1: error: undefined
reference to 'PyUnicodeUCS2_AsUTF8String'
PATH_TO_VTK_LIB_DIR/vtkWrappingPython27Core-7.1.so.1: error: undefined
reference to 'PyUnicodeUCS2_DecodeUTF8'
PATH_TO_VTK_LIB_DIR/vtkWrappingPython27Core-7.1.so.1: error: undefined
reference to 'PyUnicodeUCS2_GetSize'
collect2: error: ld returned 1 exit status
make[2]: *** [tests/test_HG] Error 1
make[1]: *** [tests/CMakeFiles/test_HG.dir/all] Error 2
make: *** [all] Error 2
That is because the linker is linking against the system Python library
instead of the one in the LD_LIBRARY_PATH.
Checking the command in VERBOSE=1 mode, I get that the c++ command is
linking against python using `-lpython2.7` instead of the fullpath to the
library.
To confirm that, explicitly adding to LDFLAGS the path to the python
library:
LDFLAGS='-L/path/to/the/dir/of/libpython2.7.so' cmake
-DBUILD_TESTS:BOOL=ON' allows the project to compile correctly.
So now, why the linker does not look into LD_LIBRARY_PATH? Is that normal?
And if it is, how should I be supposed to make the linker look into
LD_LIBRARY_PATH?
Thanks in advance,
--
_
-. .´ |∞∞∞∞
', ; |∞∞∞∞∞∞
˜˜ |∞∞∞∞∞∞∞∞∞ RdB
,., |∞∞∞∞∞∞
.' '. |∞∞∞∞
-' `'
http://rdb.is
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20180802/358497b6/attachment.html>
More information about the CMake
mailing list