Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Building project involving cmake, how do I make it aware of libraries

When I try to build this project with cmake and gcc on a 64-bit linux (debian) machine, I get an error from the linker:

Linking C executable ../../../../cpsadamsx
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlopen'
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlclose'
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlerror'
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlsym'
collect2: ld returned 1 exit status
make[2]: *** [cpsadamsx] Error 1
make[1]: *** [sundials/examples/cpodes/serial/CMakeFiles/cpsadamsx.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

Apparently dlopen, dlclose, dlerror and dlsym are references to libdl.so. I have that library in /lib64/libdl.so.2, but why is it not found?

Would it have been a normal './configure; make; make install'-path I could have set the LIBS variable and issued the configure command like this (I think):

export LIBS=-ldl && ./configure

But how do I do it now?

UPDATE:

So it seems that the (or at least a) library is found, but does not contain the symbols in question. Perhaps it tries with the 32-bit library in /lib?

Is there a way to disassemble /lib64/libdl.so.2 to make sure it does have the references dlopen etc?

The problem now seems to guide the build tools to the correct version of the library.

like image 756
dala Avatar asked Aug 13 '09 20:08

dala


People also ask

How do I link libraries in CMakeLists?

Linking libraries to executables with CMake Let's start by adding the library's directory as a subdirectory to our myapp project. add_subdirectory makes the library test defined in libtestproject available to the build. In target_link_libraries we tell CMake to link it to our executable.


1 Answers

As this question is showing up on google and both answers won't point to the correct solution here it is:

In your CMakeLists.txt add ${CMAKE_DL_LIBS} to link against idl. It should look similar to this:

target_link_libraries(ExpandableTest
    ${CMAKE_DL_LIBS}
    Expandable
    ExpandableTestLibrary
)
like image 180
Mythli Avatar answered Nov 03 '22 08:11

Mythli