[CMake] linking with .so w/ non-standard names

Kenneth Chang kchang at athenacr.com
Fri Aug 14 17:38:06 EDT 2009


I manufactured a simple setup to demonstrate what I have.  I hope this 
helps.

Thanks,
Kenny

CMakeLists.txt
~~~~~~~~~~
CMAKE_MINIMUM_REQUIRED( VERSION 2.6.4 )

ADD_EXECUTABLE( main
  main.cc
 )

SET( CMAKE_SHARED_LIBRARY_PREFIX_bak ${CMAKE_SHARED_LIBRARY_PREFIX} )
SET( CMAKE_SHARED_LIBRARY_PREFIX )
FIND_LIBRARY( THOST_LIBRARY thostmduserapi.so
  PATHS /home/kchang/sandbox/thost )
SET( CMAKE_SHARED_LIBRARY_PREFIX ${CMAKE_SHARED_LIBRARY_PREFIX_bak} )

MESSAGE( STATUS "DEBUG: THOST_LIBRARY = ${THOST_LIBRARY}" )

TARGET_LINK_LIBRARIES( main
  ${THOST_LIBRARY}
)


output
~~~~~
kchang at fiji:~/sandbox/thost$ rm -rf CMakeCache.txt

kchang at fiji:~/sandbox/thost$ ../cmake-2.6.4/bin/cmake .
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- DEBUG: THOST_LIBRARY = /home/kchang/sandbox/thost/thostmduserapi.so
-- Configuring done
-- Generating done
-- Build files have been written to: /home/kchang/sandbox/thost

kchang at fiji:~/sandbox/thost$ make VERBOSE=1
/home/kchang/sandbox/cmake-2.6.4/bin/cmake -H/home/kchang/sandbox/thost 
-B/home/kchang/sandbox/thost --check-build-system 
CMakeFiles/Makefile.cmake 0
/home/kchang/sandbox/cmake-2.6.4/bin/cmake -E cmake_progress_start 
/home/kchang/sandbox/thost/CMakeFiles 
/home/kchang/sandbox/thost/CMakeFiles/progress.make
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory `/local/home/kchang/sandbox/thost'
make -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/depend
make[2]: Entering directory `/local/home/kchang/sandbox/thost'
cd /home/kchang/sandbox/thost && 
/home/kchang/sandbox/cmake-2.6.4/bin/cmake -E cmake_depends "Unix 
Makefiles" /home/kchang/sandbox/thost /home/kchang/sandbox/thost 
/home/kchang/sandbox/thost /home/kchang/sandbox/thost 
/home/kchang/sandbox/thost/CMakeFiles/main.dir/DependInfo.cmake --color=
Dependee 
"/home/kchang/sandbox/thost/CMakeFiles/main.dir/DependInfo.cmake" is 
newer than depender 
"/home/kchang/sandbox/thost/CMakeFiles/main.dir/depend.internal".
Scanning dependencies of target main
make[2]: Leaving directory `/local/home/kchang/sandbox/thost'
make -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/build
make[2]: Entering directory `/local/home/kchang/sandbox/thost'
/home/kchang/sandbox/cmake-2.6.4/bin/cmake -E cmake_progress_report 
/home/kchang/sandbox/thost/CMakeFiles 1
[100%] Building CXX object CMakeFiles/main.dir/main.cc.o
/usr/bin/c++     -o CMakeFiles/main.dir/main.cc.o -c 
/home/kchang/sandbox/thost/main.cc
Linking CXX executable main
/home/kchang/sandbox/cmake-2.6.4/bin/cmake -E cmake_link_script 
CMakeFiles/main.dir/link.txt --verbose=1
/usr/bin/c++     -fPIC CMakeFiles/main.dir/main.cc.o  -o main -rdynamic 
-L/home/kchang/sandbox/thost -lthostmduserapi 
-Wl,-rpath,/home/kchang/sandbox/thost
/usr/bin/ld: cannot find -lthostmduserapi
collect2: ld returned 1 exit status
make[2]: *** [main] Error 1
make[2]: Leaving directory `/local/home/kchang/sandbox/thost'
make[1]: *** [CMakeFiles/main.dir/all] Error 2
make[1]: Leaving directory `/local/home/kchang/sandbox/thost'
make: *** [all] Error 2

Bill Hoffman wrote:
> Kenneth Chang wrote:
>> I did, then cmake broke the .so down into its component paths and 
>> library name, and used -L<path> -l<libname>, which caused the linker 
>> to look for <path>/lib<libname>.so
>>
>
> It should not do that in 2.6.4, it should use the full path....  Do 
> you have any policy warnings, or do you have the cmake minimum version 
> set to something very old?
>
> -Bill



More information about the CMake mailing list